UNPIVOT в нескольких столбцах для возврата нескольких столбцов

Ниже приведено требование о том, чтобы быть достигнутым в PL / SQL-

Формат таблицы

CREATE TABLE NETWORK_TABLE ( ORIG_CODE NUMBER, ORIG_SV NUMBER, DEST_CODE NUMBER, DEST_SV NUMBER ) 

Пример данных –

 INSERT INTO network_table VALUES ( 14, 1, 15, 1); INSERT INTO network_table VALUES ( 18, 4, 11, 1); INSERT INTO network_table VALUES ( 15, 1, 22, 3); INSERT INTO network_table VALUES ( 23, 2, 21, 1); INSERT INTO network_table VALUES ( 14, 3, 11, 1); INSERT INTO network_table VALUES ( 12, 2, 22, 2); 

Данные таблицы выглядят так:

 Orig_r orig_sv dest_r dest_sv 14 1 15 1 12 2 22 2 18 4 11 1 15 1 22 3 14 3 11 1 

Теперь я хочу получить результат, как показано ниже:

 ROOT SV 14 1 15 1 12 2 22 2 18 4 11 1 15 1 22 3 14 3 1 1 

Как я могу добиться этого? Цените свой вклад

как это:

 SQL> select * from network_table; ORIG_CODE ORIG_SV DEST_CODE DEST_SV ---------- ---------- ---------- ---------- 14 1 15 1 12 2 22 2 18 4 11 1 15 1 22 3 14 3 11 1 SQL> select case name when 'ORIG_SV' then orig_code else dest_code end code, val 2 from network_table 3 unpivot (val for name in (orig_sv, dest_sv)); CODE VAL ---------- ---------- 14 1 15 1 12 2 22 2 18 4 11 1 15 1 22 3 14 3 11 1 

или 10 г и ниже:

 SQL> select case r when 1 then orig_code else dest_code end code, 2 case r when 1 then orig_sv else dest_sv end val 3 from network_table, (select rownum r from dual connect by level <= 2) 4 / CODE VAL ---------- ---------- 14 1 12 2 18 4 15 1 14 3 15 1 22 2 11 1 22 3 11 1 

Вы можете использовать UNION ALL для преобразования данных из столбцов в строки .:

 select ORIG_CODE Root, ORIG_SV SV from network_table union all select DEST_CODE, DEST_SV from network_table order by root 

См. SQL Fiddle with Demo

UNION ALL оставляет любые повторяющиеся значения. Если вы хотите удалить дубликаты, вы можете использовать UNION