Вот мой пример,
WITH TABLE1 (ID,COL1,COL2,SUBCOL1,SUBCOL2)
as (select 1, 'm1',null,'s1',null from dual
union all
select 2, null ,'m2', null,'s2' from dual
)
select * from TABLE1;
Из приведенной выше таблицы1 я хочу создать представление следующим образом:
ID | COLTYPE | col | SUBCOLTYPE | subcol
-------------------------------------------------------------
1 COL1 m1 SUBCOL1 s1
2 COL2 m2 SUBCOL2 s2
Я объединил COL1, COL2 в COL и SUBCOL1, SUBCOL2 в SUBCOL. Могу ли я добиться этого с помощью функции UNPIVOT().
мой воображаемый запрос выглядит следующим образом:
select * from table1
unpivot(COL for COLTYPE in (COL1,COL2)) --- FIRST MERGE
unpivot(SUBCOL FOR SUBCOLTYPE IN (SUBCOL1,SUBCOL2)) ---SECOND MERGE
;
Каждая первая и вторая строки слияния работают индивидуально, когда комментируют другую. Но они не работают одновременно. Как добавить несколько функций unpivot() в один оператор select. Возможно ли это сделать?


Ответ на исходный вопрос
Почему вы хотите использовать unpivot? Я спрашиваю, потому что вы не переносите столбцы в строки. Гарантируется ли, что все столбцы, которые вы хотите объединить, имеют NULL, кроме одного из них? Если да, вы можете использовать функцию объединяться.
Источник данных:
ID COL1 COL2 SUBCOL1 SUBCOL2
---------- -------- -------- -------- --------
1 m1 s1
2 m2 s2
Пример:
WITH TABLE1 (ID,COL1,COL2,SUBCOL1,SUBCOL2)
as (select 1, 'm1',null,'s1',null from dual
union all
select 2, null ,'m2', null,'s2' from dual
)
select id,
coalesce(col1,col2) as col,
coalesce(subcol1, subcol2) as subcol
from TABLE1;
Результат:
ID COL SUBCOL
---------- -------- --------
1 m1 s1
2 m2 s2
Ответ на обновленный вопрос
После того, как вы отредактировали свой вопрос, вероятно, вы ищете этот синтаксис:
WITH TABLE1 (ID,COL1,COL2,SUBCOL1,SUBCOL2)
as (select 1, 'm1',null,'s1',null from dual
union all
select 2, null ,'m2', null,'s2' from dual
)
select id, coltype, col, subcoltype, subcol from TABLE1
UNPIVOT ((col, subcol) FOR (coltype, subcoltype) IN ((col1, subcol1) AS ('col1', 'subcol1'), (col2, subcol2) AS ('col2', 'subcol2')));
Результат:
ID COLTYPE COL SUBCOLTYPE SUBCOL
---------- ---------------- -------- ---------------------------- --------
1 col1 m1 subcol1 s1
2 col2 m2 subcol2 s2
спасибо, ваш awnser верен для моего примера. но мой вопрос все еще существует. Да, ты прав. Я изменил свой вопрос. Я хочу переставить два набора столбцов. поэтому я не могу сделать это с помощью одной функции unpivot ().