您的位置:首页 > 数据库

sql 中 case when 语法(转)

2010-05-25 11:17 302 查看

sql
中 case when 语法

sql语言中有没有类似C语言中的switch case的语句??


没有,用case when 来代替就行了.



例如,下面的语句显示中文年月




select getdate() as 日期,case month(getdate())

when 11
then '十一'

when 12 then '十二'

else
substring('一二三四五六七八九十', month(getdate()),1)

end+'月' as 月份

=================================================

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
都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: