元数据姓名 日期 分数
张三 1 10
张三 1 20
张三 1 30
李四 2 11
李四 2 22
王五 3 10
王五 3 10
效果
姓名 日期 分数
张三 1 10
1 20
1 30
小计 60
李四 2 11
2 22
小计 33
王五 3 10
3 10
小计 20
张三 1 10
张三 1 20
张三 1 30
李四 2 11
李四 2 22
王五 3 10
王五 3 10
效果
姓名 日期 分数
张三 1 10
1 20
1 30
小计 60
李四 2 11
2 22
小计 33
王五 3 10
3 10
小计 20
效果是这样的姓名 日期 分数
张三 1 10
null 1 20
null 1 30
null 小计 60
GROUP BY 姓名,日期,分数
WITH ROLLUP
declare @tab table(姓名 varchar(4) ,日期 varchar(1),分数 float(4))
insert into @tab
select '张三','1','10'union all
select '张三','1','20'union all
select '张三','1','30'union all
select '李四','2','11'union all
select '李四','2','22'union all
select '王五','3','10'union all
select '王五','3','10'-->开始查询
select 姓名,日期,sum(分数)as 小计,grouping(姓名)as checkxm,grouping(日期)as checkrq from @tab group by 姓名,日期,分数 with rollup-->结果集
/*
姓名 日期 小计 checkmc checkrq
李四 2 11 0 0
李四 2 22 0 0
李四 2 33 0 0
李四 NULL 33 0 1
王五 3 20 0 0
王五 3 20 0 0
王五 NULL 20 0 1
张三 1 10 0 0
张三 1 20 0 0
张三 1 30 0 0
张三 1 60 0 0
张三 NULL 60 0 1
NULL NULL 113 1 1*//*提供一种思路,把这个结果集插入到临时表,
在根据临时表中增加的判断列checkmc和checkrq进行结果集的整理
*/
declare @test table(姓名 nvarchar(4) ,日期 varchar(10),分数 float(4))
insert into @test
select N'张三','1','10'union all
select N'张三','1','20'union all
select N'张三','1','30'union all
select N'李四','2','11'union all
select N'李四','2','22'union all
select N'王五','3','10'union all
select N'王五','3','10'
select 姓名,日期,分数 from
(
select 姓名,日期,分数,姓名+日期 as sort from @test
union all
select '','小计',sum(分数),姓名+日期+'1' from @test group by 姓名,日期
)t
order by sort
/*
姓名 日期 分数
---- ---------- ----------------------
李四 2 11
李四 2 22
小计 33
王五 3 10
王五 3 10
小计 20
张三 1 10
张三 1 20
张三 1 30
小计 60
*/