--
测试数据
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
--邹建
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
--邹建