Babe_Vampire,
я не
Elic, но попробую дать запрос по второму вопросу ТС:
WITH tt AS (SELECT 12 id, 'name1' a FROM DUAL
UNION ALL
SELECT 13, 'name2' FROM DUAL
UNION ALL
SELECT 16, 'name3' FROM DUAL
UNION ALL
SELECT 22, 'name4' FROM DUAL
UNION ALL
SELECT 48, 'name5' FROM DUAL)
select decode(odd, 0, lag(id) over(order by id) ||'-'||id, id||'-'||lead(id, 1, id) over(order by id)) d, a
from (select tt.*, mod(row_number() over(order by tt.id), 2) odd
from tt) x