oracle 大表sum decode,decode行变列,前面能不用sum么?

yuanpeng 发表于 2012-3-14 10:58 thread-1590325-1-1.html

结果是我自己手写的呵呵,不知道怎么达到这种情况,在实际应用中需要这种不累加的,比如说1个人在1月份即是 ...

LZ,  你测试一下如下的语句吧, 我是猜测的!

[注: 如果你需要好几个月份,那你自己改改如下的代码, 并且把“where month <> '201102'”中‘201102'值改为最大你需要的月份即可]

SQL> select * from t2;

ID MONTH       JIAGE

---------- ------ ----------

1 201101         10

1 201101         12

1 201102         20

2 201101         15

2 201102         30

3 201101         21

6 rows selected

SQL>

SQL> select  id,

2          "201101",

3          "201102"

4  from

5  (select id,

6          month,

7          rn,

8          sum(decode(month, '201101', jiage, 0)) "201101",

9          sum(sum(decode(month, '201102', jiage, 0))) over(partition by id) "201102"

10  from

11  (select id,

12          month,

13          jiage,

14          decode(dense_rank() over(order by id), 1, row_number() over(partition by id order by month), id) rn

15    from t2)

16  group by id, month, rn)

17  where month <> '201102';

ID     201101     201102

---------- ---------- ----------

1         10         20

1         12         20

2         15         30

3         21          0

SQL>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值