0
我有一個表,看起來像這樣從一個行選擇多個值
A 1,2
B 3,4,5
我想產生一個結果集,看起來像這樣:
A 1
A 2
B 3
B 4
B 5
是否有一個SQL語句那會做到這一點?我正在使用Oracle。
我有一個表,看起來像這樣從一個行選擇多個值
A 1,2
B 3,4,5
我想產生一個結果集,看起來像這樣:
A 1
A 2
B 3
B 4
B 5
是否有一個SQL語句那會做到這一點?我正在使用Oracle。
create table foo (
var1 varchar2(1),
var2 varchar2(15)
);
insert into foo (var1, var2) values ('A', '1,2');
insert into foo (var1, var2) values ('B', '3,4,5');
insert into foo (var1, var2) values ('C', '6');
-- This will work if you are using oracle 11g
-- otherwise you will need to *guess* at the max number of rows
select var1, var2
from (
select var1
, substr(var2
, instr(var2, ',', 1, l.appearance)+1
, instr(var2, ',', 1, l.appearance+1) - instr(var2, ',', 1, l.appearance)-1) var2
from (select var1, ','||var2||',' var2 from foo)
, (select level appearance
from dual
connect by level - 1 <= (select max(regexp_count(var2, ',')) from foo)) l
)
where var2 is not null
order by var1, var2;
-- This will work if you are using oracle 10g
select var1, var2
from (
select var1
, substr(var2
, instr(var2, ',', 1, l.appearance)+1
, instr(var2, ',', 1, l.appearance+1) - instr(var2, ',', 1, l.appearance)-1) var2
from (select var1, ','||var2||',' var2 from foo)
, (select level appearance
from dual
connect by level - 1 <= 99) l
)
where var2 is not null
order by var1, var2;
我不明白你的表。逗號是什麼意思?一個新的行?空間是什麼意思? – Ariel 2011-06-16 09:29:44
[將列拆分爲多行]可能的重複(http://stackoverflow.com/questions/3713107/split-column-to-multiple-rows) – 2011-06-16 09:51:05