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来说,这很好。
您可以通过贡献 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
使用逆轴 -
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
我有一个来自 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来说,这很好。
您可以通过贡献 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
使用逆轴 -
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