【问题标题】:ORACLE unpivot columns to rowsORACLE 将列反转为行
【发布时间】:2013-10-02 04:26:01
【问题描述】:

甲骨文 10 嗨,我在这里阅读了几篇文章,但我没有想出一个简单的解决方案

我有这些数据:

Transacion_ID  GROSS_AMOUNT  DISCOUNT_AMOUNT 
1,             10 ,          -1 
2,             1002 ,        -14 
3,             36 ,          -5 

我需要反透视才能得到

Transacion_ID  TYPE     AMOUNT 
1,             GROSS ,  10 
1,             DISC  ,  -1 
2,             GROSS ,  1002 
2,             DISC  ,  -14 
3,             GROSS ,  36 
3,             DISC  ,  -5 

我的第一种方法是将其拆分为两个查询,然后只 UNION ALL 两者的结果,但它每 5 小时运行一次并且有多个连接,因此拆分意味着几乎重复的执行时间。我在 oracle 10 中寻找像 pivot/unpivot 这样的东西。

【问题讨论】:

    标签: sql oracle oracle10g


    【解决方案1】:

    试试这个

    Select * From (
    Select 
    Transacion_ID,
    Case When C.lvl = 1 Then 'GROSS'
         When C.lvl = 2 Then 'DISC'
    End TYPE,
    Case When C.lvl = 1 Then GROSS_AMOUNT
         When C.lvl = 2 Then DISCOUNT_AMOUNT
    End AMOUNT
    From T
    cross join (select level lvl from dual connect by level<=2) c     
    ) where amount is not null
    order by 1
    

    SQL DEMO

    这个查询是基于here提到的方法

    【讨论】:

    • 我不相信 UNPIVOT 运算符存在于 10.2 中——我相信它是在 11.1 中添加的。
    • @JustinCave,是的,它没有。我没有注意到这个问题是针对 10g 的,我将我的 SQL 更新为 10G 版本
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多