SQL Server中Case语句的使用你可能会忽略的
使用过SQL Server的人相信都熟悉Case的用法,它通常被用来做条件判断,比如对于如下表:
CREATE TABLE Student
(
name NVARCHAR(64) NOT NULL
, type INT NULL --1为党员,2为团员
)
INSERT INTO Student VALUES(N'小张', 1)
INSERT INTO Student VALUES(N'小李', 2)
INSERT INTO Student VALUES(N'小王', 2)
INSERT INTO Student VALUES(N'小刘', 1)
INSERT INTO Student VALUES(N'小杨', NULL)
INSERT INTO Student VALUES(N'小郭', NULL)
SELECT
CASE type
WHEN NULL THEN N'N/A'
WHEN 1 THEN N'党员'
WHEN 2 THEN N'团员'
END N'类别',
COUNT(*) N'人数'
FROM Student
GROUP BY
CASE type
WHEN NULL THEN N'N/A'
WHEN 1 THEN N'党员'
WHEN 2 THEN N'团员'
END
执行以上语句,你将得到:
类别 人数
NULL 2
党员 2
团员 2
奇怪,当type是null的时候,不是输出N/A吗?怎么变成了NULL??
百思不得其解。为什么呢?
原因很简单,因为NULL = NULL的答案是false,于是,做如下更改:
SELECT
CASE
WHEN type IS NULL THEN N'N/A'
WHEN type = 1 THEN N'党员'
WHEN type = 2 THEN N'团员'
END N'类别',
COUNT(*) N'人数'
FROM Student
GROUP BY
CASE
WHEN type IS NULL THEN N'N/A'
WHEN type = 1 THEN N'党员'
WHEN type = 2 THEN N'团员'
END
这个时候,就能正常输出结果了,如下:
类别 人数
N/A 2
党员 2
团员 2
所以,当Case语句中包含NULL条件时,一定要记得用XX IS NULL。