分类统计的SQL,你可能没有用过

在企业开发中,经常要用到报表统计等功能,对于大多数程序员来说,所能想到的可能只是将数据按不同的条件取出,分批统计,而实际上,用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的几种用法,如好的建议,还希望各们看官能留言,拍砖
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值