Не се нуждаете от DISTINCT
за да получите своя резултат; освен това, за да получите резултата в даден ред, всичко, от което се нуждаете, е ORDER BY
клауза:
select trim(regexp_substr('bbb;aaa;qqq;ccc','[^;]+', 1,level) ) as q
from dual
connect by regexp_substr('bbb;aaa;qqq;ccc', '[^;]+', 1, level) is not null
order by level