Oracle转置一个简单的表

时间:2018-06-14 21:23:15

标签: sql oracle unpivot

我有一个来自select查询的简单表,看起来像这个

plot(x[0][:],y[0][:],'b-o')

我希望能够转置它,看起来像这样

CATEGORY   | EQUAL | LESS  | GREATER
VALUE      |  60   |  100  |    20

我尝试在oracle中使用pivot功能,但我似乎无法让它工作。 我已经尝试过在线观看,但我找不到任何可以帮助我的东西。 非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:4)

使用unpivot -

CREATE TABLE Table1
    (CATEGORY varchar2(5), EQUAL int, LESS int, GREATER int)
;

INSERT ALL 
    INTO Table1 (CATEGORY, EQUAL, LESS, GREATER)
         VALUES ('VALUE', 60, 100, 20)
SELECT * FROM dual
;

查询 -

select COL AS CATEGORY,VALUE from table1
unpivot (value for COL in (EQUAL, LESS, GREATER));

结果 -

CATEGORY    VALUE
EQUAL       60
LESS        100
GREATER     20

答案 1 :(得分:2)

您可以使用union all

select 'EQUAL' as category, equal as value from t union all
select 'LESS' as category, less from t union all
select 'GREATER' as category, greater from t;

如果您有一个大表,您可能想尝试其他方法(例如Oracle 12c中的横向连接)。但对于一张小桌子,这很好。

答案 2 :(得分:1)

您可以通过 DECODE CONNECT BY 条款的贡献来取消您的值:

select decode(myId, 1, 'EQUAL',
                    2, 'LESS',
                    3, 'GREATER') as category,
       decode(myId, 1, EQUAL,
                    2, LESS,
                    3, GREATER) as value
  from mytable
   cross join (select level as myId from dual connect by level <= 3);

  CATEGORY  VALUE
  --------  -----
  EQUAL       60
  LESS       100
  GREATER     20

SQL Fiddle Demo