在企业开发中,经常要用到报表统计等功能,对于大多数程序员来说,所能想到的可能只是将数据按不同的条件取出,分批统计,而实际上,用sql自代的特性便能达到这种要求,这种即case 语句
按照SQL Server 联机文档,case语法有两种,格式如下:
简单 CASE 函数:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
CASE 搜索函数:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
这两种方式其实大同小宜,无非就是条件式即可以是值也可以是表达式.
下面看一下实例吧,呵呵
例一:
设某张进出人数统计表有name(姓名),recordDate(进出时间),state(0为进,1为出)这几列组成,那么
如果分批显示一天的进出人数,可以如下进行:
select sum(case when state = 0 then 1 else 0 end),
sum(case when state = 1 then 1 else end) from recordtable
where datediff([day],getdate(),recordDate) = 0;
而且注意,when后的可以是值,也可以是表达式,因此,又有如下应用:
例2:设表结构如上,只不过name改成了重量(这都什么含义啊,呵呵)那么,如果要统计进出重量,就可以如下:
select sum(case when state = 0 then weight else 0 end),
sum(case when state = 1 then weight else end) from recordtable
where datediff([day],getdate(),recordDate) = 0;
还有,你可以在数据处理时直接完成要在界面上显示的工作,比如,你如果将例1中的表在界面上显示,那么state肯定不会显示为0或1,因为用户不会明白0,1的含义,正常的思路可能是先生成dataset,再逐条处理,而这时,可以用case表达式提前处理数据,如下:
select name,recordtdate,case when sate = 0 then '进入' else '出入' end.
嘿嘿,这是我能想到的case的几种用法,如好的建议,还希望各们看官能留言,拍砖