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