【发布时间】:2020-06-18 13:09:15
【问题描述】:
我正在尝试整理一份报告,但无法生成所需的输出。
WITH DATA_PIVOT AS
(
SELECT 'GNA' SIGL, 'RC752293' ID_USER, '20200609' DATE_FILE, '11:30' HR_INTERVAL1, 10 DURATION1, '13:00' HR_INTERVAL2, 60 DURATION2, '15:00' HR_INTERVAL3, 10 DURATION3, 'ENTRADA' OPERATION, TO_DATE('09/06/2020 11:35:21', 'DD/MM/YYYY HH24:MI:SS') TIME_INTERVAL, 'DESCANCO' TYPE_OF_INTERVAL FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'SAIDA' , TO_DATE('09/06/2020 11:46:33', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'ENTRADA' , TO_DATE('09/06/2020 15:48:04', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'SAIDA' , TO_DATE('09/06/2020 16:01:44', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL
)
SELECT * FROM DATA_PIVOT;
在理想的世界中,我设法使用 MAX (DECODE ()) 解决了问题,并且“ID_USER”将具有以下记录序列,但我有几条记录缺少“TYPE_OF_INTERVAL”列(如上图的示例) .在完美的世界中应该是:
WITH DATA_PIVOT AS
(
SELECT 'GNA' SIGL, 'RC752293' ID_USER, '20200609' DATE_FILE, '11:30' HR_INTERVAL1, 10 DURATION1, '13:00' HR_INTERVAL2, 60 DURATION2, '15:00' HR_INTERVAL3, 10 DURATION3, 'ENTRADA' OPERATION, TO_DATE('09/06/2020 11:35:21', 'DD/MM/YYYY HH24:MI:SS') TIME_INTERVAL, 'DESCANCO' TYPE_OF_INTERVAL FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'SAIDA' , TO_DATE('09/06/2020 11:46:33', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'ENTRADA' , TO_DATE('09/06/2020 15:48:04', 'DD/MM/YYYY HH24:MI:SS') , 'LANCHE' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'SAIDA' , TO_DATE('09/06/2020 16:01:44', 'DD/MM/YYYY HH24:MI:SS') , 'LANCHE' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'ENTRADA' , TO_DATE('09/06/2020 17:48:04', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL UNION ALL
SELECT 'GNA' , 'RC752293' , '20200609' , '11:30' , 10 , '13:00' , 60 , '15:00' , 10 , 'SAIDA' , TO_DATE('09/06/2020 18:01:34', 'DD/MM/YYYY HH24:MI:SS') , 'DESCANCO' FROM DUAL
)
SELECT * FROM DATA_PIVOT;
在理想的世界中,我设法使用 MAX (DECODE ()) 解决了问题,并且“ID_USER”会有以下记录序列,但我有几条记录缺少“TYPE_OF_INTERVAL”列(作为示例上图)。在完美的世界中应该是:
但是,当 TYPE_OF_INTERVAL 列中缺少记录时,我无法格式化它们各自列中的类型。 如何在 Oracle 12C 版本中使用 SQL 生成输出?我完全迷路了,我不知道还能去哪里,我尝试了几个 PIVOT 实现
【问题讨论】:
标签: sql oracle pivot pivot-table