сводный / открепительный sql-запрос oracle с более чем 2 результирующими столбцами

#sql #oracle #oracle11g #pivot #unpivot

#sql #Oracle #oracle11g #сводный #открепительный

Вопрос:

У меня есть запрос, выходные данные которого в строке выглядят следующим образом:

 Math MathStartDate  Science ScienceStartDate    Comp    CompStartDate   Hist    HistStartDate
12      11/12/2020  13      11/02/2020          6       11/01/2020      45      11/01/2020
  

Я хочу, чтобы результат выглядел так

 Code    Value1  Value2
Math    12      11/12/2020
Science 13      11/02/2020
Comp    6       11/01/2020
Hist    45      11/01/2020
  

Чтобы получить результат, подобный приведенному выше, я использую unpivot следующим образом:

 select * from (
select 
Math,
MathStartDate,
Science,
ScienceStartDate,
Comp,
CompStartDate,
Hist,
HistStartDate
from subjects vw, students s
where s.id = vw.id 
and id = 56
)
UNPIVOT INCLUDE NULLS(value1 FOR code in(Math,
Science,
Comp,
Hist));
  

Вывод этого выглядит следующим образом,

 MathStartDate ScienceStartDate CompStartDate HistStartDate code     value1
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Math    12  
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Science 13
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Comp    6
11/12/2020      11/02/2020      11/01/2020      11/01/2020  Hist    45
  

Как мне выровнять даты, чтобы получить желаемый результат?

Ответ №1:

Вы можете открепить несколько столбцов:

 ...
UNPIVOT INCLUDE NULLS (
  (value1, startdate)
  FOR code in (
    (Math, MathStartDate) as 'Math',
    (Science, ScienceStartDate) as 'Science',
    (Comp, CompStartDate) as 'Comp',
    (Hist, HistStartDate) as 'Hist'
  )
);
  
 CODE    | VALUE1 | STARTDATE
------- | ------ | ---------
Math    |     12 | 12-NOV-20
Science |     13 | 02-NOV-20
Comp    |      6 | 01-NOV-20
Hist    |     45 | 01-NOV-20
  

db<>скрипка