统计汇总的一个sql

kuaileyu 2012-08-27 08:12:21
表 a ( id ,amount)

id amount

2012A 3

2012B 4

2011B 3

2011C 3

要的结果:
id amount

2012A 7

2012B 0

2011B 6

2011C 0

id 的前4个字符一样的,汇总金额到最后一个字母最前面的那个id上。


请教效率高的sql实现。
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjyv70 2012-08-28
  • 打赏
  • 举报
回复
如果带年份 直接用id 分组, 只要后面的 就用substr(id,5,4) 进行分组
洛丹伦的雪 2012-08-28
  • 打赏
  • 举报
回复
为什么是from dual,不是from a?
jjyv70 2012-08-28
  • 打赏
  • 举报
回复
是只按照A,B,C 分组吗 不管年份?
人生无悔 2012-08-27
  • 打赏
  • 举报
回复

with t(id,amount) as(
select '2012A',3 from dual
union all select '2012B',4 from dual
union all select '2011B',3 from dual
union all select '2011C',3 from dual
)
select id,(case when rn=1 then sum(amount) over(partition by substr(id,1,4)) else 0 end) amount
from (select row_number() over(partition by substr(id,1,4) order by id) rn,id,amount from t);
/*
ID AMOUNT
---------- ----------
2011B 6
2011C 0
2012A 7
2012B 0
*/

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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