2015-01-22 3 views
0

У меня есть следующий вывод из запроса. Я хочу получить один столбец со всеми отдельными значениями из 3 столбцов в одном запросе. Я не могу решить, может ли это быть достигнуто путем соединения или какой-либо другой функции.Подключиться по иерархическому запросу oracle

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

Ожидаемый результат:

D006 
D005 
M026 
M048 
LA019 
NP082 
NG073 

ответ

1

Объединение с КТР проще, но если вы на 11g вы можете UNPIVOT столбцы:

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 

UNPIVOT операция добавляет новый столбец, указывающий, какие из исходных столбцов значение пришли из; так как вы, по-видимому, не заинтересованы в том, что его можно отбросить, но это нужно делать во внешнем запросе.

SQL Fiddle demo с внутренним запросом с дополнительным столбцом, добавленным с помощью univot, и тем же самым, завернутым в внешний запрос, чтобы избавиться от него и удалить дубликаты.

+0

@ alex-poole-AWESOME !!! Большое спасибо ... Спасибо! –

1

Использование Union объединить различные столбцы в единые столбцы, которые также позволят избежать duplicates

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

Update:

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

Благодарим за ответ, есть ли другой вариант, кроме UNION, можно использовать функцию таблицы sys.odcivarchar2list()) и передать в него столбцы. Я пробовал, но он не принимает столбец, может быть, я не делаю этого правильно. –

+0

Эта таблица снова является большим запросом, поэтому захотелось вызвать ее один раз. –

+0

@RajA. Если это результат большого запроса, используйте «CTE». –

Смежные вопросы