Вы можете отключить парные столбцы и фильтровать только разные.
select id, fatherid, field, o before, n after
from (
select n.id, n.fatherid, n.a na, o.a oa, n.b nb, o.b ob,
to_char(n.c) nc, to_char(o.c) oc,
to_char(n.d) nd, to_char(o.d) od
from t n join t o on n.fatherid = o.id)
unpivot ((n, o) for field in ((na, oa) as 'A', (nb, ob) as 'B',
(nc, oc) as 'C', (nd, od) as 'D'))
where n <> o or (n is null and o is not null) or (n is not null and o is null)
order by id, field
демо с данными образца
ID FATHERID FIELD BEFORE AFTER
------ --------- ----- -------- -----------
2457 5678 A Mark Chris
2457 5678 D 20170804 20180402
4554 1234 B Doe Dee
4554 1234 C 15 25
Вы должны перечислить все столбцы, преобразовать их в символы.Много работы, много места для ошибок, но это лучшее, что я придумал.