SQLserver 如何分组合计?

my_yinger 2013-07-04 09:32:31
例如,有表名称列W_anme,数量列w_sl
W_anme w_sl
---------------------------
aa 3
bb 6
cc 2
aa 1
bb 8
bb 5
---------------------------
想得到
W_anme w_sl
---------------------------
aa 4
bb 19
cc 2
---------------------------

这个SQL语句怎么写?
...全文
637 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2013-08-03
  • 打赏
  • 举报
回复
--只按W_name分组的话,你的ID要多选一一下:
declare @t table (W_name varchar(2),w_sl INT, id INT)
insert into @t
select 'aa',3, 1 union all
select 'bb',6, 2 union all
select 'cc',2, 3 union all
select 'aa',1, 4 union all
select 'bb',8, 5 union all
select 'bb',5, 6

SELECT B.*, A.W_SL FROM
(SELECT W_name, w_sl=SUM(w_sl) FROM @t GROUP BY W_name) a
CROSS APPLY
(SELECT TOP(1) * FROM @t WHERE W_name = a.W_name ORDER BY id DESC) b --想取哪一条,自己随意
my_yinger 2013-08-03
  • 打赏
  • 举报
回复
引用 9 楼 tangguangqiang 的回复:
不知道楼主想要什么,建议先了解分组聚合的用法。楼主的要求可以下面语句

select id,w_anme,sum(w_sl) over(partition by w_anme) from tab
试验上述语句,提示 服务器: 消息 156,级别 15,状态 1,行 1 在关键字 'over' 附近有语法错误。
jmx123456789 2013-07-11
  • 打赏
  • 举报
回复
引用 5 楼 my_yinger 的回复:
上面的问题,怎么办
declare @t table (W_anme varchar(2),w_sl int,c varchar(20),d int) insert into @t select 'aa',3,'c',2 union all select 'bb',6,'c',2 union all select 'cc',2,'c',2 union all select 'aa',1,'c',2 union all select 'bb',8,'c',2 union all select 'bb',5,'c',2 select W_anme, w_sl=COUNT(w_sl),c,d from @t group by W_anme,c,d 注意红色对应就可以了
习惯性蹭分 2013-07-11
  • 打赏
  • 举报
回复
不知道楼主想要什么,建议先了解分组聚合的用法。楼主的要求可以下面语句

select id,w_anme,sum(w_sl) over(partition by w_anme) from tab
my_yinger 2013-07-11
  • 打赏
  • 举报
回复
上面,我只想对W_anme分组得到相应的w_sl合计。不想同时再对ID分组,只是同时显示ID而已,当如果把ID也加入到 group by 后面的话,岂不是同时也对ID分组了吗?
my_yinger 2013-07-11
  • 打赏
  • 举报
回复
上面的问题,怎么办
---涛声依旧--- 2013-07-11
  • 打赏
  • 举报
回复
select W_anme,sum(w_sl) w_sl from tbl group by W_anme select 中的列要显示的话,就必须在group by 后面加上去
my_yinger 2013-07-07
  • 打赏
  • 举报
回复
上面的试了下,都可以,但是这只对2个列的情况下。如果再加一列,例如,变成 ID,W_anme,w_sl,怎么做?还是按上面的写的话就出错,提示“在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中”
jmx123456789 2013-07-05
  • 打赏
  • 举报
回复
select W_anme,sum(w_sl) as 别名 from TB group by W_anme
叶子 2013-07-04
  • 打赏
  • 举报
回复

select W_anme,sum(w_sl) w_sl from 你的表名 group by W_anme
叶子 2013-07-04
  • 打赏
  • 举报
回复

declare @t table (W_anme varchar(2),w_sl int)
insert into @t
select 'aa',3 union all
select 'bb',6 union all
select 'cc',2 union all
select 'aa',1 union all
select 'bb',8 union all
select 'bb',5

select W_anme,sum(w_sl) w_sl from @t group by W_anme
/*
W_anme w_sl
------ -----------
aa     4
bb     19
cc     2

*/

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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