SELECT Source.par_row_id,
max(case when Source.Changed_Column= 'End Date' then str end) as End_Date,
max(case when Source.Changed_Column = 'Start Date' then str end) as Start_Date
max(case when Source.Changed_Column = 'Name' then str end) as Name,
max(case when Source.Changed_Column = 'LastName' then str end) as LastNAme
LISTAGG(Source.Changed_Column, ',') WITHIN GROUP (ORDER BY Source.par_row_id) as EventChanges
from (
--from (select Source.*, 'WAS: ' || Source.old_column_value,'' || ' NOW: ' || source.new_column_value) as str
-- from Source
-- )
select Source.*, ('WAS: ' || TO_CHAR(TO_DATE(Source.OLD_COLUMN_VALUE,'MM/DD/YYYY HH24:MI:SS') , 'DD-MON-YYYY HH24:MI:SS') ||
' NOW: ' || TO_CHAR(TO_DATE(Source.NEW_COLUMN_VALUE,'MM/DD/YYYY HH24:MI:SS') , 'DD-MON-YYYY HH24:MI:SS')) as str
from Source
) Source
group by Source.par_row_id
Вышеприведенное работает для даты, но имя и фамилия будут проблемой.
Проблема, описанная выше, будет работать, когда дата устареет, а новое значение для других столбцов вызовет ошибку.
В этом запросе выше я получу некоторые значения в varchar, и некоторые из них мне нужно преобразовать в случае, можно ли использовать CASE где-либо здесь, я пробовал CASE в этой закомментированной строке, но она не работает.
Скрипки доступны здесь, здесь каждый может проверить рабочую среду - FIDDLER