2017-08-22 20 views
0

subqueryの結果はCASEステートメントになります。Caseステートメントでサブクエリ結果を取得する方法

Select * from TestDb T 
where T.LevelId IN (CASE T.Data WHEN 7 THEN (Select Data from dbo.Split('5,4',',')) ELSE 0 END) 

欲望出力

7について - 2 ID 5と行4

さもなければ0

エラー

と1行のマッチング

サブクエリが1より大きい値を返しました。 サブクエリが、=、!<、< =、>、> =、またはサブクエリが式 として使用されている場合は、これは許可されません。

+0

聖霊降臨祭は、ご希望の出力のですか?あなたが何をしようとしているのかわからない場合、あなたを助けるのは本当に難しいです。 – Sefe

+0

スカラー式の場所で使用する場合、サブクエリは1以上の値を戻さなくてはなりません。あなたの人はあなたに必要なものを選択します。 – Serg

答えて

1

あなたが試すことができます:

Select * 
from TestDb T 
where T.DATA=7 AND T.LEVELID IN (Select Data from dbo.Split('5,4',',')) 
    OR ((T.DATA IS NULL OR T.DATA<>7) AND T.LEVELID=0) 

サンプルデータ:

CREATE TABLE TESTDB (LEVELID INT, DATA INT); 
INSERT INTO TESTDB values (4,7); 
INSERT INTO TESTDB values (0,6); 
INSERT INTO TESTDB values (0,NULL); 
INSERT INTO TESTDB values (5,7); 
INSERT INTO TESTDB values (6,7); 

を出力:

LEVELID DATA 
4 7 
0 6 
0 NULL 
5 7 
+0

T.DATAがNULL可能である場合、ORにNULLチェックがありません。 – Serg

+0

@Sergありがとうございます。私は答えを更新します – etsa

関連する問題