带小计和总计的SQL语句

-- 测试数据
create table tb( [ DB-ID ] varchar ( 10 ),ENTITY varchar ( 10 ),DATE varchar ( 10 ), [ CUST-NO ] int ,AMOUNT decimal ( 10 , 2 ),TAX decimal ( 10 , 2 ))
insert tb select ' RCHQ ' , ' 001 ' , ' 2004-11-10 ' , 200000 , 100.00 , 17.00
union all select ' RCHQ ' , ' 001 ' , ' 2004-11-10 ' , 200000 , 200.00 , 34.00
union all select ' RCHQ ' , ' 001 ' , ' 2004-11-12 ' , 200000 , 150.00 , 25.50
union all select ' RCHQ ' , ' 002 ' , ' 2004-11-10 ' , 200000 , 100.00 , 17.00
union all select ' RCHQ ' , ' 002 ' , ' 2004-11-10 ' , 200000 , 200.00 , 34.00
union all select ' RCHQ ' , ' 002 ' , ' 2004-11-12 ' , 200000 , 150.00 , 25.50
go

-- 查询
select [ DB-ID ] ,ENTITY,DATE, [ CUST-NO ] ,AMOUNT,TAX
from (
   
select [ DB-ID ] = case when grouping ( [ DB-ID ] ) = 1 then ' 合计 '
           
else [ DB-ID ] end
        ,ENTITY
= case
           
when grouping ( [ DB-ID ] ) = 1 then ''
           
when grouping (ENTITY) = 1 then ' 小计 '
           
else ENTITY end
        ,DATE
= case
           
when grouping ( [ DB-ID ] ) = 1 then ''
           
when grouping (ENTITY) = 1 then ''
           
when grouping (DATE) = 1 then ' 小计 '
           
else DATE end
        ,
[ CUST-NO ] = case
           
when grouping ( [ DB-ID ] ) = 1 then ''
           
when grouping (ENTITY) = 1 then ''
           
when grouping (DATE) = 1 then ''
           
when grouping ( [ CUST-NO ] ) = 1 then ' 小计 '
           
else cast ( [ CUST-NO ] as varchar ) end
        ,AMOUNT
= sum (AMOUNT),TAX = sum (TAX) ,s1 = grouping ( [ DB-ID ] ),s2 = [ DB-ID ]
        ,s3
= grouping (ENTITY),s4 = ENTITY ,s5 = grouping (DATE),s6 = DATE
        ,s7
= grouping ( [ CUST-NO ] ),s8 = [ CUST-NO ]
   
from tb
   
group by [ DB-ID ] ,ENTITY,DATE, [ CUST-NO ] with rollup
   
having grouping ( [ CUST-NO ] ) = 1
   
union all
   
select [ DB-ID ] ,ENTITY,DATE, cast ( [ CUST-NO ] as varchar ),AMOUNT,TAX
        ,s1
= 0 ,s2 = [ DB-ID ]
        ,s3
= 0 ,s4 = ENTITY
        ,s5
= 0 ,s6 = DATE
        ,s7
= 0 ,s8 = [ CUST-NO ]
   
from tb
)a
order by s1,s2,s3,s4,s5,s6,s7,s8 go

-- 删除测试
drop table tb

--邹建
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值