alx71,
SQL> set null "-"
SQL> /
ID A B C
---------- - -- --
1 a - -
1 b - -
1 c - -
1 - d -
1 - e z
1 - - f
1 - - g
1 - - h
1 - - i
2 a - -
2 b - -
2 - c -
2 - d -
2 - - e
14 rows selected.
SQL> ed
Wrote file afiedt.buf
1 with s1 as(
2 select 1 id, 'a' a, cast(null as varchar2(2)) b, cast(null as varchar2(2)) c from dual union all
3 select 1, 'b', null, null from dual union all
4 select 1, 'c', null, null from dual union all
5 select 1, null, 'd', null from dual union all
6 select 1, null, 'e', 'z' from dual union all
7 select 1, null, null, 'f' from dual union all
8 select 1, null, null, 'g' from dual union all
9 select 1, null, null, 'h' from dual union all
10 select 1, null, null, 'i' from dual union all
11 select 2, 'a', null, null from dual union all
12 select 2, 'b', null, null from dual union all
13 select 2, null, 'c', null from dual union all
14 select 2, null, 'd', null from dual union all
15 select 2, null, null, 'e' from dual),
16 s2 as (
17 SELECT
18 tt.*
19 ,row_number() over (partition by id,f order by t) rn FROM s1
20 UNPIVOT (t FOR f IN (a AS 'a',b AS 'b',c AS 'c')) tt
21 )
22 select * from s2
23 pivot (max(t) for f in ('a' a,'b' b,'c' c))
24* order by 1,2
25 /
ID RN A B C
---------- ---------- -- -- --
1 1 a d f
1 2 b e g
1 3 c - h
1 4 - - i
1 5 - - z
2 1 a c e
2 2 b d -
7 rows selected.
SQL>
.....
stax