# SQL Server中卷曲关键字使用技巧

###### 2023-09-16 08:20:22墨初 知识笔记 126阅读

First, create a test table, add data to createtable#t(aint, bint, cint, dint, Einstein) to # tvalues (1,2,3,4,5) to # tvalues ('1,2,3,4,6) to # tvalues (1,2,4,6).

n>)
insert into #t values(1,3,3,4,5)
insert into #t values(1,3,3,4,6)
insert into #t values(1,3,3,4,8)
insert into #t values(1,3,3,4,7)

insert into #t values(2,2,2,4,5)
insert into #t values(2,2,3,4,6)
insert into #t values(2,2,4,4,7)
insert into #t values(2,2,5,4,8)
insert into #t values(2,3,6,4,5)
insert into #t values(2,3,3,4,6)
insert into #t values(2,3,3,4,8)
insert into #t values(2,3,3,4,7) 情况一：只有一个分类汇总列时，只需要一个合计。只需要增加with rollup即可。
select case when grouping(a)=1 then '合计' else cast(a as varcharend a,
sum(b),sum(c),sum(d),sum(e) from #t group by a with rollup

select case when grouping(a)=1 then '合计' else cast(a as varcharend a,
b,
sum(c),sum(d),sum(e) from #t
group by a,b with rollup
having grouping(b)=0 or grouping(a)=1
select case when grouping(a)=1 then '合计' else cast(a as varcharend a,
b,
c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(c)=0 or grouping(a)=1

select case when grouping(a)=1 then '合计' else cast(a as varcharend a,

case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varcharend b,

case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varcharend c,
sum(d),sum(e) from #t
group by a,b,c with rollup

select case when grouping(a)=1 then '合计'

when grouping(b)=1 then cast(a as varchar)+'小计'

else cast(a as varcharend a,

case when grouping(b)=0 and grouping(c)=1

then cast(b as varchar)+'小计' else cast(b as varcharend b,

case when grouping(c)=1 and grouping(b)=0

then '' else cast(c as varcharend c,
sum(d),sum(e) from #t
group by a,b,c with rollup

select case when grouping(a)=1 then '合计' else cast(a as varcharend a,
b,

case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varcharend c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=0

select case when grouping(a)=1 then '合计' else cast(a as varcharend a,

case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varcharend b,
c,
sum(d),sum(e) from #t
group by a,b,c with rollup
having grouping(a)=1 or grouping(b)=1 or grouping(c)=0 