2011-10-03 86 views
2

我需要根據位置ID給拉了回來記錄條件邏輯,但我有兩個領域可能包含傳入標準....SQL DB2 - 在WHERE子句

像這樣

SELECT * FROM tbl 
WHERE myVar = locationID 
    IF LocationID = 0 
     myVar = location2ID 

這是一個 '邏輯' 例如......

我想我能做到

WHERE myVar = CASE WHEN locationID = 0 THEN location2ID ELSE locationID END 

儘管我應該避免在WHERE子句中讀CASE ...?爲什麼?或者這是行嗎? - 無論哪種方式,它不能

WHERE CASE WHEN locationID=0 THEN location2ID=myVAr ELSE locationID=myVar END 

也沒有

THX

對不起,小夥子們的困惑 - 並不意味着是「曖昧」 - 看起來像#2會做我想做的 - 但要澄清這裏要求的問題是...

該表存儲兩個位置,讓我們調用然後CURRENT_LOC和ORIGINAL_LOC ...在大多數情況下,這些都將有數據,但在某些情況下,'東西'hasn' t移動了...所以CURRENT_LOC是'0'。我的問題是我會傳遞一個LOCATION ID,我想要CURRENT_LOC匹配的記錄,或者如果CURRENT_LOC = 0,那麼我也想要ORIGINAL_LOC ...匹配...

是否幫助討論?我希望。

+1

你已經給出兩個答案,這對問題略有不同的面貌。請消除您的問題(指出'locationID'不是0時'location2ID'發生了什麼),並接受相關答案。 –

回答

4

WHERE myVar = COALESCE(NULLIF(locationID, 0), location2ID)

另外,

WHERE (
     (locationID <> 0 AND myVar = locationID) 
     OR 
     (locationID = 0 AND myVar = location2ID) 
    )