在SQL编程中,经常在SELECT列或ORDER BY中使用CASE语句,以至于有时会忘记CASE语句可以在任何需要表达式的地方使用。CASE语句的灵活性使其成为处理复杂逻辑的有力工具。
根据MicrosoftSQL文档,CASE语句可以在整个SELECT语句中使用。实际上,CASE语句可以在任何允许有效表达式的语句或子句中使用。例如,可以在SELECT、UPDATE、DELETE和SET语句中使用CASE,以及在select_list、IN、WHERE、ORDER BY和HAVING子句中使用。
假设想要从Persons表中获取persontype为VC或IN的所有人员。使用CASE语句,可以这样编写SQL查询:
SELECT
FirstName, LastName, PersonType
FROM
Person.Person
WHERE
1 =
CASE
WHEN PersonType = 'VC' THEN 1
WHEN PersonType = 'IN' THEN 1
ELSE 0
END
在这个例子中,如果PersonType匹配,CASE返回1。由于1 = 1是真值,所以该行被返回。
这主要取决于可读性。在这个例子中,逻辑相当简单。在这里,认为使用基本的布尔OR或IN运算符更合适。
下面是使用OR运算符的示例:
SELECT
FirstName, LastName, PersonType
FROM
Person.Person
WHERE
PersonType = 'VC' OR PersonType = 'IN'
下面是使用IN运算符的示例:
SELECT
FirstName, LastName, PersonType
FROM
Person.Person
WHERE
PersonType IN ('VC', 'IN')