来自同一子查询的列的 SQL 联合为一个

标签 sql oracle union

我想选择一个列作为同一个表的第 1、2、3、4 列中内容的联合。自 SUBQUERYCONDITION很复杂我觉得这是错误的方法:

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/

相关文章:

sql - 在 SQL Server 中获取当前系统时间

c# - Entity Framework - SQL 查询 - 限制和排序依据 - SQL Server

database - 我的 Oracle 10gr2 检查约束有什么问题?试图强制执行日期范围

Oracle SQL - 使事务原子化

sql - 我应该加入还是应该联合

mysql - Windows 应用程序本地数据库部署的建议

php - 首先通过 rand 获取 mysql 特色项,然后通过 asc 获取其他项

mysql - 以不同的方式编写 SQL 查询

mysql - 性能最好的 MySql 'Friend' 表

mysql - 在mysql中结合order by