Это можно сделать с помощью общего табличного выражения (WITH
), самосоединения и функций ROW_NUMBER
и NULLIF
.
WITH t AS (SELECT *, ROW_NUMBER() OVER (ORDER BY Field1) rownum FROM table1)
SELECT NULLIF(curr.Field1, prev.Field1) Field1,
NULLIF(curr.Field2, prev.Field2) Field2,
NULLIF(curr.Field3, prev.Field3) Field3
FROM t curr
LEFT OUTER JOIN t prev ON prev.rownum = curr.rownum - 1