2017-05-08 9 views
0

私は完全に元のテキストが実際には非常に長いので、私は完全なクエリを持っていませんが、あなたが私の構文でどこにエラーがあるかもしれないと感じるかもしれないと思う。基本的に私は2つの変数を宣言し、1つの変数が空白の場合は、where文は他の変数にはないフィールドにする必要があります。私は、同様のステートメントを使用して、クエリのスニペットを得ることができるSQL where文CASE変数

Where dnCP_FromServiceDate >= '01/01/2016' And 
dnCP_FromServiceDate <= '01/31/2016' And 
dnCP_RecordStatus <> 'V' 
AND CASE WHEN @inpDXIN = '' THEN 
predxDiagnosisCode not in (@inpDXNOTIN) 
ELSE predxDiagnosisCode IN (@inpDXIN) 
END 

場合でも、私は私を把握することができますが、私は似た何かを見つける傾けます。どんな助けも大いにありがたいです

+0

ご使用のデータベースで質問にタグを付けてください。 –

+0

'@inpDXNOTIN'と' @inpDXIN'のサンプル値を文字列、メモリテーブルなどに指定できますか? – gordy

答えて

1

一般に句にcaseを使用したくありません。

Where dnCP_FromServiceDate >= '2016-01-01' and 
     dnCP_FromServiceDate <= '2016-01-31' and 
     dnCP_RecordStatus <> 'V' and 
     ((@inpDXIN = '' and predxDiagnosisCode <> @inpDXNOTIN) or 
     (@inpDXIN <> '' and predxDiagnosisCode IN (@inpDXIN) 
    ) 

注:

  • 使用ISO/ANSI標準の日付形式代わりに、普通のブール論理を使用しています。はるかにあいまいではありません。
  • IN (@var)= @varと同じです。変数を通してinリストを渡すことはできません。その機能が必要な場合は、別のの質問をに依頼してください。
  • SQLのほとんどの方言は、ブール式がcaseから返されることを許可していません。上記は "制限"を回避します。
+0

これはロジックホールを見落とすかもしれないと思います。あなたのソリューションはOPのコードと同じことをします:inpDXINが空であることをチェックし、inpDXNOTINをチェックしません。彼らは両方とも空の場合はどうなりますか?どちらも空でない場合はどうなりますか? @ Scott。 – Scott

+0

。 。構文のエラーは 'else'節のブール式です。クエリにはいくつかの問題がありますが、これを解決しようとしました。 –

+0

だから、上記のコードは助けになるかもしれませんが、私が結果で望んでいない変数を返すのです。 –