MSSQL中Case函数用法详谈

1、如下表(条件是离散值的情况)

FName  Level

Jerry  1

Wander 2

luck   3

 

输出下表形式的格式:

FName  会员级别

Jerry  普通会员

Wander 高级会员

luck   VIP

 

select FName,

(

case [Level]  --Level是数据库中的关键字,用它作为字段的时候,要用[]括起来

when 1 then '普通会员'

when 2 then '高级会员'

when 3 then 'VIP'

end

) as 会员级别

from T_Level

 

 

2、条件是在一个范围的情况

select FName,

(

case

when FSalary<2000 then 'Lower'

when FSalary>=2000 and FSalary<=5000 then 'Just so so'

else 'Upper'

end

) as 收入水平

from T_Employee

 

3、表内容(多列显示):

单号     金额

k1       10

k2       20

k3      -30

k4      -10

 

输出下表形式的格式:

单号     收入        支出

k1        10          0

k2        20          0

k3        0         30

k4        0         10

 

select number,

(

case

when amount>=0 then amount else 0

end

) as 收入,

(

case

when amount<0 then ABS(amount) else 0

end

) as 支出

from T_Amount

 

4、表内容(考虑分组的情况):

Name                Score

拜仁               

奇才               

湖人             

拜仁               

拜仁               

奇才               

 

输出下表形式的格式:

Name          胜        负

拜仁           1        2

湖人           1        0

奇才        2        0

 

select Name,

sum

(

case Score

when '胜' then 1 else 0

end

) as 胜,

sum

(

case Score

when '负' then 1 else 0

end

) as 负

from T_Compare

group by Name

 

因为进行了分组操作,所以要用聚合函数对每一项进行处理。

 

 

5、表内容(横表转纵表):

id        科目        成绩

1        语文            70        

1        数学            89

1        英语            90

2        语文            82

2        数学            73

 

输出下表形式的格式:

id        语文        数学        英语

1         70        89        90

2         82        73        0

 

select id,

sum

(

case 科目

when '语文' then 成绩 else 0

end

)  as 语文,

sum

(

case 科目

when '数学' then 成绩 else 0

end

)  as 数学,

sum

(

case 科目

when '英语' then 成绩 else 0

end

)  as 英语

from T_Class

group by id

posted @ 2012-04-07 10:15  秋恨雪  阅读(3618)  评论(0编辑  收藏  举报