你的“编号”值显示为字符串,你不能有一个名为number
除非你使用带引号的标识符列,所以我取代value
创建示例数据:
create table table1(value varchar2(7), name varchar2(4));
insert into table1 (value, name)
select '01', 'A' from dual
union all select '01', 'B' from dual
union all select '02', 'A' from dual
union all select '01', 'C' from dual
union all select '02', 'C' from dual
union all select '03', 'C' from dual
union all select '04', 'C' from dual
/
您可以使用分析功能来分配行号或排名,以每个值:
select name, value,
row_number() over (partition by name order by value) as rn
from table1;
NAME VALUE RN
---- ------- ----------
A 01 1
A 02 2
B 01 1
C 01 1
C 02 2
C 03 3
C 04 4
然后你就可以pivot
that query(只要你在11g或更高),以获得结果你想要的:
select *
from (
select name, value,
row_number() over (partition by name order by value) as rn
from table1
)
pivot (max(value) as value for (rn) in (1, 2, 3, 4, 5));
NAME 1_VALUE 2_VALUE 3_VALUE 4_VALUE 5_VALUE
---- ------- ------- ------- ------- -------
A 01 02
B 01
C 01 02 03 04
排序高于5的任何内容都被pivot操作忽略。
到目前为止您尝试了什么? – RealCheeseLord