1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| WITH MaTable AS
(
SELECT 200 AS indiv, 'pole' AS libl, 1212 AS ident, 'rue' AS adres FROM dual union ALL
SELECT 200 , NULL , 3 , 'rue' FROM dual union ALL
SELECT 555 , NULL , NULL , 'impasse' FROM dual union ALL
SELECT 555 , NULL , 221 , 'impasse' FROM dual union ALL
SELECT 655 , 'pole' , NULL , 'impasse' FROM dual union all
SELECT 700 , NULL , NULL , 'rue' FROM dual
)
SELECT indiv, libl, ident, adres,
row_number() over(partition BY indiv ORDER BY case libl when 'pole' then 1 else 0 end DESC, libl ASC, ident ASC, adres ASC) AS rn
FROM MaTable;
INDIV LIBL IDENT ADRES RN
200 pole 1212 rue 1
200 3 rue 2
555 221 impasse 1
555 impasse 2
655 pole impasse 1
700 rue 1 |