Connect By分层查询oracle

Connect By hierarchical query oracle

我有以下查询输出。我想获得一列,其中包含 3 列中的所有不同值 query.I 我无法决定是否可以通过 connect by 或其他函数来实现。

Dad     Mom    Child
------  ----   -----
D006    M026    LA019
D006    M026    NP082
D005    M048    NG073

预期输出:

D006
D005
M026
M048
LA019
NP082
NG073

使用Union将不同的列组合成单个列,这也将避免duplicates

SELECT Dad FROM yourtable
UNION
SELECT Mom FROM yourtable
UNION
SELECT Child FROM yourtable 

更新:

WITH cte
     AS (SELECT Dad,Mom,Child
         FROM   bigquery) 
SELECT Dad FROM cte
UNION
SELECT Mom FROM cte
UNION
SELECT Child FROM cte; 

具有 CTE 的联合更简单,但如果您使用的是 11g,则可以取消旋转列:

select distinct person
from (
  select *
  from (
    -- this is your real big query
    select 'D006' as dad, 'M026' as mom, 'LA019' as child from dual
    union all select 'D006', 'M026', 'NP082' from dual
    union all select 'D005', 'M048', 'NG073' from dual
  )
  unpivot (person for anyone IN (dad AS 'DAD', mom AS 'MOM', child AS 'CHILD'))
);

PERSON
------
D006   
NP082  
M026   
LA019  
M048   
D005   
NG073  

 7 rows selected 

逆透视操作添加了一个新列,指示值来自哪个原始列;因为您显然对它可以被丢弃不感兴趣,但这必须在外部查询中完成。

SQL Fiddle demo 显示内部查询,其中包含反透视表添加的额外列,以及包含在外部查询中以摆脱它并删除重复项的相同内容。