Oracle SQL将两列合并为一列,但不使用UNION

xqnpmsa8  于 2023-08-03  发布在  Oracle
关注(0)|答案(3)|浏览(145)

在ORACLE 11 G中,我有一个带有这种输出的SELECT:

COL_A       COL_B
-------     -------
BCS         (null)
(null)      FFG
VKD         FIU
...

字符串
我想要这个:

MY_ALIAS
---------
BCS
FFG
VKD
FIU
...


COL_A和COL_B是同一个表中的列。这个查询有点复杂。
正如你所看到的,有三种类型的行:COL_A有一个值,COL_B有一个null,相反的两列都有一个值。
我知道这可以用一个联合体这样做:

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子句的必要性。我的回答的主要目的是消除重复。*

谢谢你,谢谢

toe95027

toe950271#

可以尝试使用UNPIVOT FUNCTION

SELECT 
   MY_ALIAS 
FROM 
(
    SELECT COL_A, COL_B AS MY_ALIAS
    WHERE <lots of conditions here>
) T UNPIVOT (MY_ALIAS FOR COL IN (COL_A, COL_B))

字符串

nhhxz33t

nhhxz33t2#

只需首先在包含所需列的所有记录上使用UNION ALL,加上where子句中需要的所有列。然后获取不同的值。

select distinct mycol
from
(
  select col_a as mycol, col_a, col_b, col_c from mytable
  union all
  select col_b as mycol, col_a, col_b, col_c from mytable
) data
where <lots of conditions here>;

字符串

9rbhqvlz

9rbhqvlz3#

使用WITH子句应用您的条件:

with filtered as
(
  select col_a, col_b from mytable where <lots of conditions here>
)
select col_a from filtered
union
select col_b from filtered;

字符串

相关问题