6

以下は、特定のユーザーのデータが必要な場合のクエリの where 句です。

where Completion_Date>= '11/01/2011' 
and Completion_Date<= '12/11/2012' 
and System_user_id = 1234

以下は、すべてのユーザーのデータを取得する場合の where 句です。

where Completion_Date>= '11/01/2011' 
and Completion_Date<= '12/11/2012'

私は2つの別々のクエリを必要としないので、where句に条件を追加して単一のクエリを使用できるようにする方法はありますか?入力(つまりSystem_user_id)に応じて、クエリに追加の条件を追加するかどうかを決定します すべてのユーザーのデータが必要な場合は-1を送信し、特定のユーザーのsystem_user_idが送信されます。

4

2 に答える 2

9

次の手順を試すことができます。

更新されたクエリ

declare @userid int = -1
if (@userid = -1)
    BEGIN

     SELECT * FROM mytable 
     where Completion_Date>= '11/01/2011' 
     and Completion_Date<= '12/11/2012' 
     and userid in 
         (select distinct userID from mytable)
    end
ELSE
    BEGIN

     SELECT * FROM mytable 
     where Completion_Date>= '11/01/2011' 
     and Completion_Date<= '12/11/2012' 
     and userid = @userid 

end;

結果:

USERID  NAME    COMPLETION_DATE
123     john    2011-11-01
125     tim     2011-11-02
127     ron     2011-11-08

特定のユーザーを表示するには:


別の方法

OPからの最新のコメントの後に更新

クエリ:

DECLARE @uid int = -1
SELECT 
*
FROM mytable 
WHERE 
( CASE 
     WHEN @uid <> -1 THEN @uid
     ELSE userid
  END
) = userid

and Completion_Date>= '11/01/2011' 
     and Completion_Date<= '12/11/2012' 
;

結果:@uid=-1の場合

USERID  NAME    COMPLETION_DATE
123     john    2011-11-01
125     tim     2011-11-02
127     ron     2011-11-08

これを試したことがある場合はコメントしてください:)

于 2012-12-13T11:03:36.673 に答える
5

試す:

WHERE ((@System_user_id = -1)
  AND (Completion_Date >= '11/01/2011') 
  AND (Completion_Date <= '12/11/2012'))
OR ((@System_user_id <> -1) 
  AND (System_user_id = @System_user_id) 
  AND (Completion_Date >= '11/01/2011') 
  AND (Completion_Date <= '12/11/2012'))

共通テーブル式を使用したこれのバリエーション ( SQL Fiddle )

;WITH CompletionDates AS
(
    SELECT *
    FROM MyTable
    WHERE Completion_Date >= '11/01/2011'
    AND Completion_Date <= '12/11/2012'
)
SELECT * 
FROM CompletionDates
WHERE (@System_user_id = -1) OR (System_user_id = @System_user_id)
于 2012-12-13T10:59:47.370 に答える