2012-01-04 9 views
2

入力パラメータの特定の文字列が見つかった場合、特定の条件に基づいてデータベースをクエリする必要があるソフトウェアアプリケーションがあります。しかし、特定の文字列が見つからない場合は、制限基準を含めることは望ましくありません。複雑なSQL WHERE句の問題

これにどのようにアプローチするかはわかりませんが、すでにコードがあります。私はちょうどそれを終了するように見えることはできません。次のように私のwhere句が表示されます。

WHERE p.country = @country AND 
p.[state] = @state AND 
p.last_update BETWEEN @from AND @to AND 
f.facility_id = @facid AND 
p.sex = @gender AND 
p.disease1 = CASE WHEN @inpDisease LIKE '%AIDS%' THEN 1 ELSE --?? Here is where it gets tricky 

エイズが@inpDisease文字列内に見つからない場合は、私はp.disease1基準にクエリを制限する必要はありません。 Disease1はデータ型ビットなので、その列には1または0しか存在しません。 ELSEで0と1の両方を指定する方法、またはDisease1をすべて無視する方法はありますか?私はinpDiseaseに存在するかどうかチェックしなければならない15個以上のBITフィールドを持っています。

これを完了する最善の方法は何か?私はここでは1つのフィールドを省略するか、クエリからそこに1つのフィールドを省略するために、条件付きロジックを利用する大量のSELECTで終わりたいとは思わない。

私はこの問題を解決するために良いアイデアを思いつくことができないので、どんな助けもありがとう! @inpDiseaseはその後、%エイズ%、p.diseaseの必須のようである場合

p.disease1 = CASE WHEN @inpDisease LIKE '%AIDS%' THEN 1 ELSE p.disease1 END 
+0

データベースの人々は、おそらく「条件付きの場所」を呼び出す可能性が高くなります。ただのFYI。 – tnktnk

答えて

6

は、独自の値に列を比較しますbe 1
@inpDiseaseが%AIDS%のようなものではない場合、p.diseaseは無視されます。

+0

+1 - 今日はロールに入っています – Lamak

+0

阿部...あなたは確かにできます。ダンは私のための瞬間でした...ありがとう、私は試してみましょう – Encryption

+1

@AbeMiessler - はい、あなたは – Lamak

2

​​

:あなたはその基準を使用したくない場合は おかげ