2016-09-02 20 views
1

IN条件との句は、入力値、このようなwhere句のcase文として@inputとストアドプロシージャで、使用する場所でのCASE文:信じられないほどSQL Serverの:私は希望

SELECT my_column 
FROM MY_TABLE 
WHERE MY_TABLE.my_column in (CASE WHEN @input = '1' THEN ('A','B','C') ELSE ('A') END) 

、私は上記のように望んでいた

SELECT my_column 
FROM MY_TABLE 
WHERE MY_TABLE.my_column in (CASE WHEN @input = '1' THEN ('C') ELSE ('A') END) 

は私がCASE文でIN条件を使用することができます。私は「THEN」このような後に一つの値だけを置いたときにそれが動作しますか?私がしたいことをするための別の方法がありますか?

はあなたの最初のクエリに問題がCASE戻ったばかりのスカラー値ということである

CLJ

+0

'T-SQLでCASE'は(単にA + B''など)**表現**である - ない*声明* - これは最終的に1つの単一の原子値で置き換えられます –

答えて

3

、あなたの助けをいただき、ありがとうございます。値のリストを返すことはできません。

代わりに、あなたは単にORを使用することができます。

SELECT my_column 
FROM MY_TABLE 
WHERE (@input = '1' and MY_TABLE.my_column IN ('A','B','C')) 
     OR 
     (@input <> '1' and MY_TABLE.my_column = 'A') 
+0

あなたは明確にしてください、なぜそれが動作しないのでしょうか.... WHERE my_column in(@getval)。 SELECT @getvalは文字列 'A'、 'B'、 'C​​'を返します。 – p2k

+0

@ Pinwar13 'A '、' B '、' C ''はデータの単一の*文字列ではありません。代わりに、3つの別々の文字列値の* set *です。 'CASE' *は一連の値を返すことができません。 –

+0

ありがとう!これは私の学習のためのものです。私はCASEが値のセットを返すことができないことを理解します。宣言@getval varchar(100)= CASE WHEN入力= '1' THEN( '' 'B' '、' C '' ')ELSE(' A ')END。ここでは、CASEから文字列 'A'、 'B'、 'C​​'を取得できます。 – p2k

関連する問題