这会儿只能想出这个,也不知道符合限制不
WITH T AS (
SELECT 'A' NM , 1 VAL FROM DUAL UNION ALL
SELECT 'B' NM , 1 VAL FROM DUAL UNION ALL
SELECT 'B' NM , 2 VAL FROM DUAL UNION ALL
SELECT 'C' NM , 1 VAL FROM DUAL UNION ALL
SELECT 'D' NM , 2 VAL FROM DUAL UNION ALL
SELECT 'D' NM , 3 VAL FROM DUAL
),
tmp as (
select
sys_connect_by_path(nm, ',') str, sys_connect_by_path(VAL, ',') n, rownum id
from
t
where
nm=(select max(nm) from t)
start with nm='A'
connect by prior ascii(nm)+1=ascii(nm)
)
select
regexp_substr(str, '[^,]+', 1, level) nm2, regexp_substr(n, '[^,]+', 1, level) val2
from
tmp
connect by prior id=id and level0
order by id, 1;
|