Oracle 转置一个简单的 table

Oracle transpose a simple table

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

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

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

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

我试过在 oracle 中使用 pivot 函数,但我似乎无法让它工作。 我试过在网上四处寻找,但找不到任何对我有帮助的东西。 非常感谢您的帮助!

您可以使用 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;

如果您的 table 很大,您可能想尝试一些其他方法(例如 Oracle 12c 中的横向连接)。但是对于一个小的table来说,这很好。

您可以通过贡献 DECODECONNECT 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

使用逆轴 -

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