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。

posted on 2011-01-13 11:00  TomXie  阅读(460)  评论(0编辑  收藏  举报

导航