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