Я пытаюсь составить отчет, но мне не удается сформировать желаемый результат.
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;
![Perfect world](https://i.stack.imgur.com/JQDa5.jpg)
В идеальном мире мне удалось решить, используя MAX (DECODE ()), и я бы получил следующая последовательность записей для «ID_USER», но у меня есть несколько записей с отсутствующим столбцом «TYPE_OF_INTERVAL» (как пример изображения выше). В идеальном мире это было бы:
Однако, когда в столбце TYPE_OF_INTERVAL отсутствуют записи, я не могу отформатировать типы в соответствующих столбцах. Как я могу сгенерировать вывод, используя SQL с версией Oracle 12 C? Я полностью потерялся, и я не знаю, где еще go, я пробовал несколько реализаций PIVOT