日期:2014-05-17  浏览次数:20500 次

请教一个简单的SQL语句
已知数据:
NO    NAME    SCORE
1     张三     70
2     李四     90
3     王五     80
4     赵六     100
5     周二     60
6     丁一     80

需要按行分组统计分数,
按照一行分组(@COUNT=1),则数据结果:
NO    NAME    SCORE
1     张三     70
2     合计     70
3     李四     90
4     合计     90
5     王五     80
6     合计     80
7     赵六     100
8     合计     100
9     周二     60
10    合计     60
11    丁一     80
12    合计     80

按照两行分组(@COUNT=2),则数据结果:
NO    NAME    SCORE
1     张三     70
2     李四     90
3     合计     160
4     王五     80
5     赵六     100
6     合计     180
7     周二     60
8     丁一     80
9     合计     140

如何用一条语句实现,谢谢大家帮助!


------最佳解决方案--------------------
 declare @count int=3
  select row_number() over(order by getdate()) as no,name,score
  from (
  select ceiling(no/(@count*1.0)) no,case when grouping(name)=1 then '合计' else name end as name,sum(score) score
  from #A
  group by ceiling(no/(@count*1.0)),name with rollup
  ) as TB
终极版了  ...
------其他解决方案--------------------
create table #A (no int,name varchar(20),score int)
insert into #A
select 1 ,'张三', 70 union all select 
 2     ,'李四',     90 union all select 
 3     ,'王五',     80 union all select 
 4     ,'赵六',     100 union all select 
 5     ,'周二',     60 union all select 
 6     ,'丁一',     80
 --测试
 declare @count int=2
  select row_number() over(order by getdate()) as no,name,score
  from (
  select ceiling((no+1)/@count) no,case&nbs