>>Select t1.field1, t2.field2, t3.field3, nvl(t1.group, Nvl(t2.group, t3.group)) as group, sys(2015) as newId ; >>from (Select field1, group ; >>from Table1 ; >>where !Empty(field1)) t1 ; >>full join (Select field2, group ; >>from Table1 ; >>where !Empty(field2)) t2 on t1.group = t2.group ; >>full join (Select field3, group ; >>from Table1 ; >>where !Empty(field3)) t3 on Nvl(t1.group, t2.group) = t3.group >>>
SELECT NVL(t1.field1, SPACE(LEN(table1.field1))) AS field1, ; > NVL(t2.field2, SPACE(LEN(table1.field2))) AS field2, ; > NVL(t3.field3, SPACE(LEN(table1.field3))) AS field3, ; > NVL(t1.group, NVL(t2.group, t3.group)) AS group, ; > SYS(2015) AS newId ; > ; > FROM (SELECT field1, group FROM table1 WHERE !Empty(field1)) t1 ; > FULL JOIN (SELECT field2, group FROM table1 WHERE !Empty(field2)) t2 ON t1.group = t2.group ; > FULL JOIN (SELECT field3, group FROM table1 WHERE !Empty(field3)) t3 ON NVL(t1.group, t2.group) = t3.group ; > ; > INTO CURSOR c_scrunched >In that case I would prefer using Cast(), instead of space. ie:
SELECT NVL(t1.field1, CAST('' as c(10)) AS field1, ...