Oracle:转置表

时间:2012-04-03 09:12:59

标签: sql oracle

我有以下查询

SELECT 1, 2 FROM DUAL

我喜欢

之类的东西
SELECT TRANSPOSE(SELECT 1, 2 FROM DUAL)

输出相同
SELECT 1 FROM DUAL
UNION
SELECT 2 FROM DUAL

我希望用列交换行。

3 个答案:

答案 0 :(得分:5)

假设这是Oracle 11,您可以使用UNPIVOT:

select no from
(SELECT 1 a, 2 b FROM DUAL) dummy
unpivot (no for col in (a as 'A', b as 'B'))

答案 1 :(得分:1)

使用dbms_xmlgen.getxmltypeXMLTABLE

SELECT *
FROM XMLTABLE('/ROWSET/ROW/*' passing  dbms_xmlgen.getxmltype('SELECT 1, 2, 3 FROM DUAL') 
              COLUMNS val VARCHAR(100) PATH '.');

db<>fiddle demo

优于枢纽的优势-无需预先指定列列表

答案 2 :(得分:0)

如果您没有Oracle 11g,那么最好的解决方案就是您提供的解决方案:

SELECT 1 FROM DUAL
UNION
SELECT 2 FROM DUAL