2012-05-01 62 views
0

我有這個疑問,但我還需要第二WHERE條件依賴於在設定值:CASE當SQL WHERE條件的非數值數據

SELECT TABLE1.*, TABLE2.* 
FROM TABLE1, TABLE2 
WHERE TABLE1.ID = TABLE2.ID 
AND TABLE1.TIMESTAMP > DATEADD(D,-5,GETDATE()) 

所以我會這樣的事情這(因爲「>」)不工作:

SELECT TABLE1.*, TABLE2.* 
FROM TABLE1, TABLE2 
WHERE TABLE1.ID = TABLE2.ID 
AND CASE WHEN TABLE1.TRIGGER = 'TRUE' THEN TABLE1.TIMESTAMP > DATEADD(D,-5,GETDATE()) END 

我環顧四周,但我只能找到例子,其中的用意是操縱數字信息。有沒有人有任何想法?

回答

2

更改此:

AND TABLE1.TIMESTAMP > DATEADD(D,-5,GETDATE()) 

要:

AND (TABLE1.TRIGGER <> 'TRUE' or (TABLE1.TRIGGER = 'TRUE' AND TABLE1.TIMESTAMP > DATEADD(D,-5,GETDATE())) 

這要麼是 「和真正的」 如果TABLE1.TRIGGER不等於TRUE,或者它會執行你的額外條件檢查(TABLE1.TIMESTAMP > ...)如果它等於TRUE

1

CASE產生一個值,所以你需要對它做些什麼,例如,將其與其他值進行比較:

SELECT TABLE1.*, TABLE2.* 
    FROM TABLE1, TABLE2 
    WHERE TABLE1.ID = TABLE2.ID AND 
    CASE 
     WHEN TABLE1.TRIGGER = 'TRUE' THEN 1 
     WHEN TABLE1.TIMESTAMP > DATEADD(D,-5,GETDATE()) THEN 1 
     ELSE 0 
     END = 1