with
my_table as (
select
'Attr1,Attr2,Attr3' as HEADER,
'1,2,3,4,5,6,7,8,9' as BODY
from DUAL
),
my_columns as (
select
regexp_substr(t.HEADER, '[^,]+', 1, level) as ATTR_COLUMN
from my_table t
connect by level <= length(regexp_replace(t.HEADER, '[^,]+')) + 1
)
select *
from (
select *
from my_columns
) pivot (
count(ATTR_COLUMN)
for (ATTR_COLUMN) in ('Attr1','Attr2','Attr3')
);
假设您有 Oracle。在输出动态列数的阶段就会出现问题。只有 PIVOT 可以添加列,但必须提前列出:
很可能没有动态查询就没有办法。