用ROLLUP改写sql


FROM http://blog.csdn.net/jgmydsai/article/details/10598559

原语句如下(其中bb为with()语句里的内容):

[sql]  view plain copy
  1. select bb.dept_code,  
  2.        bb.dept_name,  
  3.        '0000000001',  
  4.        '小计',  
  5.        sum(bb.tot_cost) 金额  
  6.   from bb  
  7.  group by bb.dept_code, bb.dept_name  
  8. UNion all  
  9. select bb.dept_code,  
  10.        bb.dept_name,  
  11.        '0000011111',  
  12.        '1',  
  13.        sum(bb.tot_cost)  
  14.   from bb  
  15.  where (bb.code = '001' or bb.code = '002' OR bb.code = '003')  
  16.  group by bb.dept_code, bb.dept_name  
  17. union all  
  18. select bb.dept_code,  
  19.        bb.dept_name,  
  20.        bb.code,  
  21.        bb.fee_stat_name,  
  22.        sum(bb.tot_cost)  
  23.   from bb  
  24.  where (bb.code = '001' or bb.code = '002' OR bb.code = '003')  
  25.  group by bb.dept_code, bb.dept_name, bb.code, bb.fee_stat_name  
  26. union all  
  27. select bb.dept_code, bb.dept_name, '01111111''2'sum(bb.tot_cost)  
  28.   from bb  
  29.  where (bb.code <> '001' and bb.code <> '002' and bb.code <> '003')  
  30.  group by bb.dept_code, bb.dept_name  
  31. union all  
  32. select bb.dept_code,  
  33.        bb.dept_name,  
  34.        bb.fee_stat_cate,  
  35.        bb.fee_stat_name,  
  36.        sum(bb.tot_cost)  
  37.   from bb  
  38.  where (bb.code <> '001' AND bb.code <> '002' AND bb.code <> '003')  
  39.  group by bb.dept_code,  
  40.           bb.dept_name,  
  41.           bb.fee_stat_cate,  
  42.           bb.fee_stat_cate,  
  43.           bb.fee_stat_name  

首先对bb处理如下,实际上就是改写下with语句

[sql]  view plain copy
  1. ALTER TABLE BB ADD tt VARCHAR2(50)  
  2. UPDATE BB SET tt = (CASE  
  3.                  WHEN (BB.CODE = '001' OR BB.CODE = '002' OR BB.CODE = '003'THEN  
  4.                   '1'  
  5.                  WHEN (BB.CODE <> '001' AND BB.CODE <> '002' AND  
  6.                       BB.CODE <> '003'THEN  
  7.                   '2'  
  8.                END)  
  9. update BB set code = fee_stat_cate where  tt = '2'  
  10. SELECT * FROM BB  
  11. alter table bb drop column fee_stat_cate  

改写后的语句如下

[sql]  view plain copy
  1. SELECT BB.DEPT_CODE ,  
  2.        BB.DEPT_NAME ,  
  3.        CASE  
  4.          WHEN GROUPING(CODE) = 1 AND GROUPING(tt) = 1 THEN  
  5.           '0000000001'  
  6.          WHEN GROUPING(CODE) = 1 AND tt = '1' THEN  
  7.           '0000011111'  
  8.          WHEN GROUPING(CODE) = 1 AND tt = '2' THEN  
  9.           '01111111'  
  10.          ELSE  
  11.           BB.CODE  
  12.        END AS CODE,  
  13.        CASE  
  14.          WHEN GROUPING(CODE) = 1 AND GROUPING(tt) = 1 THEN  
  15.           '小计'  
  16.          WHEN GROUPING(CODE) = 1 THEN  
  17.           tt  
  18.          ELSE  
  19.           BB.FEE_STAT_NAME  
  20.        END AS fy,  
  21.        SUM(BB.TOT_COST) 金额  
  22.   FROM BB  
  23.  GROUP BY DEPT_CODE,  
  24.           DEPT_NAME,  
  25.           ROLLUP(tt, ( CODE, FEE_STAT_NAME))  
  26.  ORDER BY GROUPING(tt) DESC,  
  27.           tt,  
  28.           GROUPING(CODE) DESC,  
  29.           3,  
  30.           4,  
  31.           2  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值