Amigão, não se você ainda possui o problema uma solução possível utilizando o ultimo exemplo que você passou é a seguinte:
Selecionar tudo
with t1 as( select 1 id, 1 Col1, 'A' Col2 from dual
UNION
select 1 ,2, 'A' from dual
UNION
select 2 ,3, 'B' from dual
UNION
select 2 ,4, 'B' from dual
UNION
select 2 ,5, 'B' from dual
UNION
select 3 ,6, 'A' from dual
UNION
select 3 ,7, 'A' from dual
)
select
col2,
min (col1)||'-'||max(col1)
from
T1
GROUP BY
col2,id
Criei um atributo adicional no seu select chamado id, esse id é um sequencial que só muda quando o valor de col1 for alterado, caso você popule a tabela em um programa ou PL/SQL é até fácil fazer isso.
Criado esse atributo inclui ele no group by utilizando a mesma base criada e funciona...
Qualquer dúvida estou a disposição...