http://www.cnblogs.com/janes/archive/2009/03/23/1419527.html
CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在
WHERE 子句中使用
CASE。
首先让我们看一下
CASE 的语法。在一般的
SELECT 中,其语法如下:
SELECT
<myColumnSpec
>
=
CASE
WHEN
<A
>
THEN
<somethingA
>
WHEN
<B
>
THEN
<somethingB
>
ELSE
<somethingE
>
END
在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:
USE pubs
GO
SELECT
Title,
'
Price Range
'
=
CASE
WHEN price
IS
NULL
THEN
'
Unpriced
'
WHEN price
<
10
THEN
'
Bargain
'
WHEN price
BETWEEN
10
and
20
THEN
'
Average
'
ELSE
'
Gift to impress relatives
'
END
FROM titles
ORDER
BY price
GO
这是
CASE 的典型用法,但是使用
CASE 其实可以做更多的事情。比方说下面的
GROUP
BY 子句中的
CASE:
SELECT
'
Number of Titles
',
Count(
*)
FROM titles
GROUP
BY
CASE
WHEN price
IS
NULL
THEN
'
Unpriced
'
WHEN price
<
10
THEN
'
Bargain
'
WHEN price
BETWEEN
10
and
20
THEN
'
Average
'
ELSE
'
Gift to impress relatives
'
END
GO
你甚至还可以组合这些选项,添加一个
ORDER
BY 子句,如下所示:
USE pubs
GO
SELECT
CASE
WHEN price
IS
NULL
THEN
'
Unpriced
'
WHEN price
<
10
THEN
'
Bargain
'
WHEN price
BETWEEN
10
and
20
THEN
'
Average
'
ELSE
'
Gift to impress relatives
'
END
AS Range,
Title
FROM titles
GROUP
BY
CASE
WHEN price
IS
NULL
THEN
'
Unpriced
'
WHEN price
<
10
THEN
'
Bargain
'
WHEN price
BETWEEN
10
and
20
THEN
'
Average
'
ELSE
'
Gift to impress relatives
'
END,
Title
ORDER
BY
CASE
WHEN price
IS
NULL
THEN
'
Unpriced
'
WHEN price
<
10
THEN
'
Bargain
'
WHEN price
BETWEEN
10
and
20
THEN
'
Average
'
ELSE
'
Gift to impress relatives
'
END,
Title
GO
注意,为了在
GROUP
BY 块中使用
CASE,查询语句需要在
GROUP
BY 块中重复
SELECT 块中的
CASE 块。
除了选择自定义字段之外,在很多情况下
CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集









































































