如何用sql做分组小记和总计

great_king 2008-08-19 04:41:14
如果要统计表中每个人(name)的小记,可以使用group by 例如:
SELECT name, sum(ge) FROM test group by name

但是这样的到结果是一个小记的集合而已。
name ge
------------------
abc 40
abc123 123
Add 4379
bbb 777
d 123

而我想得到的结果是这样的:

name ge 小记
-------------------
abc 20
abc 20
40
abc123 123
123
Add 789
Add 789
Add 789
Add 789
Add 1223
4379
bbb 777
777
d 123
123
合计 5442


有没有办法利用sql语句的到这样的结果呢?
...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
great_king 2008-08-19
  • 打赏
  • 举报
回复
方法找到,代码如下:
select
'小记'=case
when grouping(id)=1 then '小记'
else ''
end
, id=case
when grouping(id)=1 then ''
else id
end
,name,'分值'=sum(ge) from test group by name,id with ROLLUP

各位辛苦啦 散分
great_king 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wufeng4552 的回复:]
declare @t table([name] varchar(10),ge int)
insert @t select 'abc', 40
insert @t select'abc123', 123
insert @t select'Add' , 4379
insert @t select'Add' , 4379
insert @t select'bbb' , 777
insert @t select'd' , 123
insert @t select'd' , 123
select [name],sum(ge) from @t group by [name] with cube
[/Quote]

呵呵,老大,先谢谢你回复,不过你查询出来的结果和
SELECT name, sum(ge) FROM test group by name
是一样的。
utpcb 2008-08-19
  • 打赏
  • 举报
回复
以上是2005的
水族杰纶 2008-08-19
  • 打赏
  • 举报
回复
declare @t table([name] varchar(10),ge int)
insert @t select 'abc', 40
insert @t select'abc123', 123
insert @t select'Add' , 4379
insert @t select'Add' , 4379
insert @t select'bbb' , 777
insert @t select'd' , 123
insert @t select'd' , 123
select [name],sum(ge) from @t group by [name] with cube
中国风 2008-08-19
  • 打赏
  • 举报
回复
declare @T table([name] nvarchar(6),[ge] int)
Insert @T
select N'abc',40 union all
select N'abc123',123 union all
select N'Add',4379 union all
select N'bbb',777 union all
select N'd',123

Select
[name]=case when grouping([name])=1 then '合計' when grouping([ge])=1 then '' else [name] end,
[ge]=isnull(rtrim([ge]),''),
case when grouping([ge])=1 then rtrim(sum([ge])) else '' end 小记
from @T group by [name],[ge] with rollup


(5 個資料列受到影響)
name ge 小记
------ ------------ ------------
abc 40
40
abc123 123
123
Add 4379
4379
bbb 777
777
d 123
123
合計 5442

(11 個資料列受到影響)

中国风 2008-08-19
  • 打赏
  • 举报
回复
declare @T table([name] nvarchar(6),[ge] int)
Insert @T
select N'abc',40 union all
select N'abc123',123 union all
select N'Add',4379 union all
select N'bbb',777 union all
select N'd',123

Select
[name]=case when grouping([name])=1 then '合計' when grouping([ge])=1 then '' else [name] end,
[ge]=isnull(rtrim([ge]),''),
sum([ge]) 小记
from @T group by [name],[ge] with rollup



(5 個資料列受到影響)
name ge 小记
------ ------------ -----------
abc 40 40
40
abc123 123 123
123
Add 4379 4379
4379
bbb 777 777
777
d 123 123
123
合計 5442

(11 個資料列受到影響)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧