SQL:过滤where子句中的case-statement数据替换

时间:2013-03-19 12:41:16

标签: sql sql-server where

如果我有一个名为'Beasties'的表,并且我想对列中的数据值进行一些条件替换,例如Animal,然后对该列进行过滤,我会尝试这样做......

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

但是T-SQL不允许WHERE子句,它只会让我使用Animal而不是Species。如何过滤重命名的(因此编辑过的)列值?

提前感谢您提供任何帮助。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

你可以把它放在子查询中:

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

答案 2 :(得分:1)

我不知道是否有一种特别优雅的方式,但如果没有这种方法,这应该有用:

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