SQL 查询合计方法及相应函数使用说明

declare @t table(姓名 nvarchar(10),课程 nvarchar(20),分数 int)
insert into @t select N'王三',N'语文',89

insert into @t select N'王三',N'英语',87

insert into @t select N'王三',N'数学',90

insert into @t select N'李四',N'语文',65

insert into @t select N'李四',N'英语',75

insert into @t select N'李四',N'数学',80


select

    case when grouping(课程)=1 then '总分' else 姓名 end as 姓名--指定合计列

    ,isnull(课程'')

    ,sum(分数) as 分数
from 
@t

group by

    姓名

    ,课程

with rollup

having grouping(姓名)=0--禁止全部学生成绩合计

 

结果:

王三 英语 87
王三 数学 90
王三 语文 89
总分         266
李四 英语 75
李四 数学 80
李四 语文 65
总分         220

----以上引用自CSDN论坛

grouping函数说明:

使用GROUPING 函数时,一般是在有CUBE 或ROLLUP 时使用。
使用GROUPING 函数,其参数就是一个入参,一般就是某个字段名,或者是GROUP BY 子句中使用的表达式。
GROUPING 函数返回值是0 或1.是合计列返回1,不是则返回0.

通过使用GROUPING 函数,你可以发现哪一行是本来的记录,哪一行是小计.也可以发现那些NULL值,是原本数据的NULL值,还是由于CUBE 或ROLLUP 来形成的NULL值。

实际上,GROUPING 函数,在使用CUBE 和ROLLUP 时,非小计的结果行,其函数的返回值肯定是0。在小计的结果行,会根据这个小计是否是这个GROUPING 函数所对应的字段求小计,从而返回0 或1 的结果。

---以上引自"小樽的雨后"博客.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值