2013-03-19 106 views
1

如果我有一個名爲'Beasties'的表,並且我想對列中的數據值進行一些條件替換(例如Animal),然後過濾該列,我會盡力做到這一點...SQL:在where子句中的case-statement數據替換過濾器

SELECT 
    (CASE Animal 
    WHEN 'Horse' THEN 'Zebra' 
    ELSE Animal 
    END) AS Species 
FROM Beasties 
WHERE Species='Zebra' 

但是T-SQL不允許在WHERE子句,它只會讓我用,而不是種動物。如何過濾重命名(因此編輯)的列值?

在此先感謝您的幫助。

+0

我想重要的問題是你爲什麼要這樣做?有沒有更容易解決問題的方法?物種表? – 2013-03-19 13:29:18

+1

因爲我必須更新可怕的遺留代碼,而且生活不公平。 – 2013-03-19 14:58:00

回答

5

這樣做:

SELECT 
    (CASE Animal 
    WHEN 'Horse' THEN 'Zebra' 
    ELSE Animal 
    END) AS Species 
FROM Beasties 
WHERE 'Zebra'=(CASE Animal WHEN 'Horse' THEN 'Zebra' ELSE Animal END) 
+0

必須這樣,所有與執行順序有關,對不對?好,好的答案,謝謝! – 2013-03-19 14:56:14

1

我不知道是否有一個特別優雅的方式來做到這一點,但如果沒有這應該工作:

WHERE Animal IN ('Horse', 'Zebra') 
2

你可能只是堅持它在子查詢中:

SELECT * 
FROM (
    SELECT 
     (CASE Animal 
     WHEN 'Horse' THEN 'Zebra' 
     ELSE Animal 
     END) AS Species 
    FROM Beasties 
) 
WHERE Species='Zebra'