1

レポートパラメータをストアドプロシージャ(@Time)に渡して、WHERE句を介してデータセットに返されるカテゴリ値を指定しようとしていますが、これを正しく実行するための構文がわかりません。ケース/ifを使用する必要があると思われます。これは以前に実行したことがありますが、WHERE句INを実行する必要がある場合は実行していません。

DECLARE @Time AS NVARCHAR
SET @Time = 'REG' --possible values of 'REG' and 'OT'

SELECT
f.[Category]    AS [Category]

FROM foo f

WHERE
@Time =  
  CASE @Time
    WHEN 'REG' THEN f.[Category] IN (A, B, C, D)
    WHEN 'OT' THEN f.[Category] IN (E, F, G) 
END
4

3 に答える 3

2

を使用して、次のようなクエリ制限ORに置き換えることができます。CASE

DECLARE @Time AS NVARCHAR(3)
SET @Time = 'REG' --possible values of 'OT' and 'REG'

SELECT
f.[Category] AS [Category]

FROM foo f

WHERE (@Time = 'REG' and f.[Category] IN (A, B, C, D))
   OR (@Time = 'OT'  and f.[Category] IN (E, F, G))

END
于 2012-06-04T14:56:44.520 に答える
1
SELECT f.[Category] AS [Category]
FROM foo f
WHERE (@Time = 'REG' and f.[Category] IN (A, B, C, D))
    or (@Time = 'OT' and f.[Category] IN (E, F, G))
于 2012-06-04T14:54:03.677 に答える
0

まず、文字変数を宣言するときは、常に長さを含める必要があります。つまり、@Timeを1文字として宣言していることになります。3文字欲しいと思います。

次に、nvarchar()変数を宣言するときに、それにnvarchar()を割り当てます。構文は「Reg」ではなく「N」Regです。

第三に、INリストには何がありますか?これらをデータの定数または列にするつもりですか?

そして最後に、WHERE句に必要なものは次のようになります。

WHERE (CASE WHEN @Time ='REG' and f.[Category] IN (A, B, C, D)  then 'true'
            WHEN @Time ='OT' THEN f.[Category] IN (E, F, G) then 'true'
            else 'false'
       end) = 'true'
于 2012-06-04T14:56:12.600 に答える