1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| WITH tmp AS
(
SELECT 1 AS num, 'PAL' AS adr, 34 AS dir FROM dual union all
SELECT 1 , 'PEL' , 43 FROM dual union all
SELECT 1 , 'PUL' , 54 FROM dual union all
SELECT 2 , 'PAL' , 34 FROM dual union all
SELECT 2 , 'POU' , 47 FROM dual union all
SELECT 2 , 'TRU' , 23 FROM dual
)
, sr as
(
select num, adr, dir
, row_number() over(partition by num order by adr asc) as rn
from tmp
)
select num
, max(case rn when 1 then adr end) as adr_1
, max(case rn when 1 then dir end) as dir_1
, max(case rn when 2 then adr end) as adr_2
, max(case rn when 2 then dir end) as dir_2
, max(case rn when 3 then adr end) as adr_3
, max(case rn when 3 then dir end) as dir_3
from sr
group by num;
NUM ADR_1 DIR_1 ADR_2 DIR_2 ADR_3 DIR_3
--- ----- ----- ----- ----- ----- -----
1 PAL 34 PEL 43 PUL 54
2 PAL 34 POU 47 TRU 23 |
Partager