Oracle:转置表

Rev*_*ous 4 sql oracle

我有以下查询

SELECT 1, 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)

我喜欢类似的东西

SELECT TRANSPOSE(SELECT 1, 2 FROM DUAL)
Run Code Online (Sandbox Code Playgroud)

与输出相同

SELECT 1 FROM DUAL
UNION
SELECT 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)

我希望它用列交换行.

小智 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'))
Run Code Online (Sandbox Code Playgroud)


Luk*_*zda 1

使用dbms_xmlgen.getxmltypeXMLTABLE

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

db<>小提琴演示

相对于 unpivot 的优点 - 无需提前指定列列表