元数据
姓名 日期 分数
张三 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
------解决方案--------------------
- SQL code
SELECT 姓名,日期,SUM(分数)分数 FROM TEST GROUP BY 姓名,日期,分数 WITH ROLLUP
------解决方案--------------------
- SQL code
-->测试数据declare @tab table(姓名 varchar(4) ,日期 varchar(1),分数 float(4))insert into @tab select '张三','1','10'union allselect '张三','1','20'union allselect '张三','1','30'union allselect '李四','2','11'union allselect '李四','2','22'union allselect '王五','3','10'union allselect '王五','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 1NULL NULL 113 1 1*//*提供一种思路,把这个结果集插入到临时表,在根据临时表中增加的判断列checkmc和checkrq进行结果集的整理*/
------解决方案--------------------
- SQL code
declare @test table(姓名 nvarchar(4) ,日期 varchar(10),分数 float(4))insert into @test select N'张三','1','10'union allselect N'张三','1','20'union allselect N'张三','1','30'union allselect N'李四','2','11'union allselect N'李四','2','22'union allselect N'王五','3','10'union allselect N'王五','3','10'select 姓名,日期,分数 from ( select 姓名,日期,分数,姓名+日期 as sort from @test union all select '','小计',sum(分数),姓名+日期+'1' from @test group by 姓名,日期)torder by sort/*姓名 日期 分数---- ---------- ----------------------李四 2 11李四 2 22 小计 33王五 3 10王五 3 10 小计 20张三 1 10张三 1 20张三 1 30 小计 60*/