日期:2014-05-17 浏览次数:20429 次
SELECT 姓名,日期,SUM(分数)分数 FROM TEST 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 */