【发布时间】:2020-09-23 17:06:39
【问题描述】:
我有一个查询,我需要在其中旋转一个包含多个日期的字段。简而言之,manageddate 列需要转为 6 列,其中日期从最新到最旧。
我目前的努力如下
SELECT student_number,
wheninput,
whoinput,
certificatetype,
MAX(CASE
WHEN vaccine_name = 'DTP' THEN
TO_CHAR(administereddate, 'mm/dd/yyyy')
ELSE
''
END) AS "DTP"
FROM
(
SELECT TO_CHAR(administeredDate, 'mm/dd/yyyy') dose_date,
ROW_NUMBER() OVER (PARTITION BY vaccine_name ORDER BY administereddate DESC) dose
FROM ps.pshealthgrade1)
PIVOT(
LISTAGG(dose_date) WITHIN GROUP (ORDER BY dose_date DESC)
FOR dose IN (1 DTP_dose1,
2 DTP_dose2,
3 DTP_dose3,
4 DTP_dose4,
5 DTP_dose5,
6 DTP_dose6)
)
)
WHERE vaccine_name = 'DTP'
GROUP BY student_number,
wheninput,
whoinput,
vaccine_name,
administereddate,
certificatetype
ORDER BY student_number, vaccine_name, administereddate;
【问题讨论】:
标签: sql oracle plsql pivot sqlplus