2017-08-04 78 views
0

我找的,我需要有動態的基於數據我的WHERE子句條件變化的方法。動態設置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子句中的CASE表達式。如您where子句可以被改寫:

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

順便問一下,你提到「如果條件是‘過’,那麼[金額]應在[ThresholdAmount]」,但在你的代碼中檢查是否Amount是「上方」 或等於ThresholdAmount。我遵循你的代碼所做的。

我還延長你的假設數據庫是不區分大小寫。