ストアド プロシージャに 3 つのパラメータを渡しています@Time, @DeptID, @Value
。
@Time
1 = 過去 24 時間、2 = 過去 1 週間、3 = 過去 1 か月、4 = 過去 1 年を表します。@DeptID
各部門のIDです@Value
1=低い順、2=高い順
これが私の現在のコードです:
DECLARE @SQL VARCHAR(MAX)
SET @SQL = ('SELECT S.ID, S.[Description], D.Department, S.Value, S.[Date] FROM Suggestions S INNER JOIN Department D ON D.ID = S.DeptID WHERE Approved =1')
IF (@DeptID = 0 AND @Value = 0 AND @Time = 0)
BEGIN
SET @SQL = (@SQL +' ORDER BY [Date] DESC')
END
IF (@Time > 0)
BEGIN
SET @SQL = (CASE WHEN @Time = 1 THEN (@SQL + ' AND [Date] >= DATEADD(DAY, -1, GETDATE()) ORDER BY S.[Date] DESC')
WHEN @Time = 2 THEN (@SQL + ' AND [Date] >= DATEADD(DAY, -7, GETDATE()) ORDER BY S.[Date] DESC' )
WHEN @Time = 3 THEN (@SQL + ' AND [Date] >= DATEADD(DAY, -30, GETDATE()) ORDER BY S.[Date] DESC')
WHEN @Time = 4 THEN (@SQL + ' AND [Date] >= DATEADD(DAY, -365, GETDATE()) ORDER BY S.[Date] DESC') END)
END
IF (@DeptID > 0)
BEGIN
SET @SQL = @SQL + ' AND S.DeptID = @DeptID ORDER BY S.[Date] DESC')
END
IF (@Value > 0)
BEGIN
SET @SQL = (CASE WHEN @Value = 1 THEN (@SQL + ' ORDER BY S.Value DESC')
WHEN @Value = 2 THEN (@SQL + ' ORDER BY S.Value ASC')
これは、1 つのパラメーターのみが渡される場合は問題ありませんが、2 つ以上のパラメーターでフィルター処理しようとすると問題が発生します...これまでのところ、最後に 2 つの 'Order By' 句を追加しているため、エラーが発生しています。私の声明の:
ORDER BY S.[Date] DESC ORDER BY S.Value DESC
誰でもこれで正しい方向に向けることができますか? どんな助けでも大歓迎です