2017-08-04 4 views
0

WHERE節の条件をデータに基づいて動的に変更する必要があるメソッドを探しています。動的に設定されているクエリの条件

私のシナリオの模擬データを見つけてください。

----------------------------------- 
    ConditionID  ConditionName 
----------------------------------- 
    1     N/A 
    2     Over 
    3     Under 

    -------------------------------------------------------------- 
    ID  Amount  ThresholdAmount  ConditionID 
    -------------------------------------------------------------- 
    1   90   100     3 
    2   190   100     2 
    3   90   100     2 
    4   190   100     3 
    5   90   100     1 

[ConditionID]に基づいて[Amount]と[ThresholdAmount]を比較する必要があります。たとえば、条件が 'Over'の場合、[Amount]は[ThresholdAmount]以上でなければなりません。満たされていない場合は、レコードをフィルタリングする必要があります。

注:私は自分よりも優れたアプローチがあるかどうかを調べています。

私のアプローチ:

WHERE 
    1 = CASE 
      WHEN ConditionName = 'OVER' THEN 
       CASE WHEN ([Amount] >= [ThresholdAmount]) THEN 1 ELSE 0 END 
      WHEN ConditionName = 'UNDER' THEN 
       CASE WHEN ([Amount] <= [ThresholdAmount]) THEN 1 ELSE 0 END 
      WHEN ConditionName = 'N/A' THEN 
       1 
      END 

おかげで、 Prakazz

+3

質問を編集して「回答」を表示してください。なぜあなたがすでにやったことに着くのであれば、誰も助けようと心配してはいけません。 –

+0

@GordonLinoff – Prakazz

答えて

4

私はあなたが何を意味することは、本当にダイナミックではないが、ここでは "動的" 間違った単語を使用していると思います。違いを感じるにはdynamic sqlを検索してください。

通常は、where句に大文字と小文字の区別を避けるのが最善です。あなたのwhere句を書き換えることができます:、あなたが言及ところで

WHERE  (ConditionName = 'OVER' AND [Amount] >= [ThresholdAmount]) 
     OR (ConditionName = 'UNDER' AND [Amount] <= [ThresholdAmount]) 
     OR ConditionName = 'N/A' 

「状態が続いて[金額] 『以上』の場合、[ThresholdAmount]の上にあるべき」が、あなたのコード内であなたがいるかどうかを確認Amountは、「上」またはそれに等しい~ThresholdAmountである。私はあなたのコードがしていることに従った。

データベースが大文字と小文字を区別しないという前提も拡張しました。

関連する問題