当前位置: 代码迷 >> Sql Server >> 统计分析,该怎么处理
  详细解决方案

统计分析,该怎么处理

热度:424   发布时间:2016-04-27 11:12:03.0
统计分析
元数据

姓名 日期 分数
张三 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*/