Как добавить несколько функций unpivot () в один оператор select ORACLE

Вот мой пример,

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. Возможно ли это сделать?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ на исходный вопрос

Почему вы хотите использовать 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 ().

Nwn 17.04.2018 12:00

Другие вопросы по теме