动态插入合计

crszf 2013-05-14 09:39:17
求助:
有一张动态表,表数据模板如下:
序号 卡号 金额
1 001 1
2 002 4
3 002 6
4 001 2

需要实现如下效果:

序号 卡号 金额
1 001 1
4 001 2
合计 3
2 002 4
3 002 6
合计 10

只要一个卡号有一笔以上的金额,就要针对该卡号进行金额合计
...全文
188 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vanjayhsu 2013-05-14
  • 打赏
  • 举报
回复
两个都不错,rollup和group by grouping sets
睿智天成 2013-05-14
  • 打赏
  • 举报
回复
引用 3 楼 HJ_daxian 的回复:

with t1 as
(
     select 1 c1,'001' c2,1 c3 from dual union all
     select 2 c1,'002' c2,4 c3 from dual union all
     select 3 c1,'001' c2,6 c3 from dual union all
     select 4 c1,'002' c2,2 c3 from dual
)

select c1,
       case when c1 is null and c2 is not null then c2||'合计' 
            when c1 is null and c2 is null then '总计' 
            else c2 end c2,
       sum(c3) c3
from t1
group by rollup(c2,c1)
order by c2,c1


    c1    c2     c3
----------------------------------
1	1	001	1
2	3	001	6
3		001合计	7
4	2	002	4
5	4	002	2
6		002合计	6
7		总计	13

ROLLUP这个函数学习了,还有个CUBE函数。
crszf 2013-05-14
  • 打赏
  • 举报
回复
非常感谢。。。。。。。。。
u010412956 2013-05-14
  • 打赏
  • 举报
回复
with t as
 (select 1 seq, '001' cno, 1 amt from dual
  union all
  select 2 seq, '002' cno, 4 amt
    from dual
      union all
  select 3 seq, '002' cno, 6 amt
    from dual
  union all
  select 4 seq, '001' cno, 2 amt
    from dual
  union all
  select 5 seq, '003' cno, 3 amt from dual)
select seq, cno, sum(amt) from t group by grouping sets((seq, cno), cno);
  • 打赏
  • 举报
回复

with t1 as
(
     select 1 c1,'001' c2,1 c3 from dual union all
     select 2 c1,'002' c2,4 c3 from dual union all
     select 3 c1,'001' c2,6 c3 from dual union all
     select 4 c1,'002' c2,2 c3 from dual
)

select c1,
       case when c1 is null and c2 is not null then c2||'合计' 
            when c1 is null and c2 is null then '总计' 
            else c2 end c2,
       sum(c3) c3
from t1
group by rollup(c2,c1)
order by c2,c1


    c1    c2     c3
----------------------------------
1	1	001	1
2	3	001	6
3		001合计	7
4	2	002	4
5	4	002	2
6		002合计	6
7		总计	13

crszf 2013-05-14
  • 打赏
  • 举报
回复
是的。。。。。。。。。。。。。
睿智天成 2013-05-14
  • 打赏
  • 举报
回复
引用 楼主 crszf 的回复:
求助: 有一张动态表,表数据模板如下: 序号 卡号 金额 1 001 1 2 002 4 3 002 6 4 001 2 需要实现如下效果: 序号 卡号 金额 1 001 1 4 001 2 合计 3 2 002 4 3 002 6 合计 10 只要一个卡号有一笔以上的金额,就要针对该卡号进行金额合计
后面的合计是另外占的一行
善若止水 2013-05-14
  • 打赏
  • 举报
回复
这是rllup 函数的用法
---rollup函数
SELECT ID,CASE WHEN ID IS NULL THEN '合计' ELSE CARD_ID END ,MONEY FROM 
(SELECT  T.CARD_ID,T.ID, SUM(T.MONEY) MONEY
  FROM TEST1 T
 GROUP BY ROLLUP(T.CARD_ID,T.ID) ) d
 WHERE  CARD_ID IS NOT NULL

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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