Let's consider SQL like this:
with example as (
select 1 key1, 10 seq, 'abc1' code from dual
union
select 1 key1, 20 seq, 'abc2' code from dual
union
select 1 key1, 30 seq, 'abc3' code from dual
union
select 1 key1, 40 seq, 'abc4' code from dual
union
select 1 key1, 50 seq, 'abc5' code from dual
union
select 2 key1, 100 seq, 'bc1' code from dual
union
select 2 key1, 200 seq, 'bc2' code from dual
union
select 2 key1, 300 seq, 'bc3' code from dual
union
select 2 key1, 400 seq, 'bc4' code from dual
)
select * from (
select key1, seq
, row_number() OVER (PARTITION BY key1 order by seq) rn
, code code1
, lead(code,1,null) OVER (PARTITION BY key1 order by seq) code2
, lead(code,2,null) OVER (PARTITION BY key1 order by seq) code3
, lead(code,3,null) OVER (PARTITION BY key1 order by seq) code4
, lead(code,4,null) OVER (PARTITION BY key1 order by seq) code5
from example
order by key1, seq
)
where rn = 1
order by key1
It will produce the desired result:
| key1 | rn | seq | code1 | code2 | code3 | code4 | code5 |
| 1 | 10 | 1 | abc1 | abc2 | abc3 | abc4 | abc5 |
| 2 | 100 | 1 | bc1 | bc2 | bc3 | bc4 | |
|
|