我想选择一个列作为同一个表的第 1、2、3、4 列中内容的联合。自 SUBQUERY
和 CONDITION
很复杂我觉得这是错误的方法:
SELECT COL1 FROM SUBQUERY WHERE CONDITION
UNION
SELECT COL2 FROM SUBQUERY WHERE CONDITION
UNION
SELECT COL3 FROM SUBQUERY WHERE CONDITION
UNION
SELECT COL4 FROM SUBQUERY WHERE CONDITION
UNION
SELECT COL5 FROM SUBQUERY WHERE CONDITION
由于此查询在性能方面和从良好编码风格的角度来看都很糟糕,Oracle 中是否有更好的语法?
附言
如果只有以下伪代码是正确的……那就完美了:
SELECT COL1 UNION COL2 UNION COL3 UNION COL4
FROM
SUBQUERY WHERE CONDITION;
最佳答案
您可以使用 UNPIVOT
:
select * from
(select 'a' col1, 'b' col2, 'c' col3, 'd' col4, 'e' col5 from dual)
unpivot (
united_columns for subquery_column in ("COL1", "COL2", "COL3", "COL4", "COL5"));
SUBQUERY_COLUMN UNITED_COLUMNS
--------------- --------------
COL1 a
COL2 b
COL3 c
COL4 d
COL5 e
放置您的 select * from subquery where condition
而不是 select 'a' col1, 'b' col2, 'c' col3, 'd' col4, 'e' col5 from dual
更多信息UNPIVOT
得到这个想法:http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html
关于来自同一子查询的列的 SQL 联合为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231702/