#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