【发布时间】:2017-02-21 08:59:25
【问题描述】:
在 ORACLE 11G 中,我有一个带有这种输出的 SELECT:
COL_A COL_B
------- -------
BCS (null)
(null) FFG
VKD FIU
...
我想得到这个:
MY_ALIAS
---------
BCD
FFG
VKD
FIU
...
COL_A 和 COL_B 来自同一个表。查询有点复杂。
如您所见,行有 3 种类型:COL_A 有值,COL_B 为空,相反,最后两列都有值。
我知道这可以通过 UNION 以这种方式完成:
SELECT MY_ALIAS FROM (
SELECT (COL_A) AS MY_ALIAS
WHERE <lots of conditions here>
AND COL_A IS NOT NULL
UNION
SELECT (COL_B) AS MY_ALIAS
WHERE <lots of conditions here>
AND COL_B IS NOT NULL
)
这样,WHERE 子句中的条件将完全相同,我想避免它。
有没有什么方法可以在不重复和没有 PL/SQL 的情况下实现这一点,只需一个 SELECT 查询?
编辑删除了避免 UNION 子句的需要。我回答的主要目的是避免重复。
谢谢!
【问题讨论】:
-
将
WHERE <lots of conditions here>移到派生表之外。 (更好的代码,更容易维护。) -
我试过你的解决方案,它有效,谢谢 jarlh!