相關表單如下所示:
ID NAME
1 張三
2 李四
3 王五
XUH SUBJECT
1,2 語文
2,3 數學
1,2,3 物理
1,3 英語
1 生物
想實作如下所示:
XUH NAME SUBJECT
1,2 張三,李四 語文
2,3 李四,王五 數學
1,2,3 張三,李四,王五 物理
1,3 張三,王五 英語
1 張三 生物
麻煩指點一下,謝謝!
uj5u.com熱心網友回復:
用逗號分割開,然后做連接,再合并uj5u.com熱心網友回復:
select xuh,(select wm_concat(name) from t1 where instr(xuh,id)>0) as name,subject from t2uj5u.com熱心網友回復:
select xuh,wm_concat(name) name, subjectfrom (
select t2.xuh,t1.id,t1.name,t2.subject
from t2
join t1
where instr(t2.xuh,t1.id) > 0
order by t1.id) tt
group by xuh,subject;
uj5u.com熱心網友回復:
我的Oracle資料庫版本不支持wm_concat這個函式,另外這個instr不行吧?現在我給的示例是1,2,3,可以這樣處理。假如是1,12,123這樣的序號的話,用instr就有問題了。uj5u.com熱心網友回復:
也不會有問題,wm_contact沒有的話可以下載一個包,實在不行只能用行列轉換,然后拼接欄位咯
uj5u.com熱心網友回復:
如果是9i以下,建議寫個函式處理好一點。
如果10G以上,用這個不會有問題了:
select xuh,
(select wm_concat(name) from t1
where id in
(select case when instr(xuh,',')=0 then xuh else regexp_substr(xuh,'[^,]',1,level) end
from dual connect by level<=length(xuh)-length(replace(xuh,',',''))+1))
as name,subject
from t2
uj5u.com熱心網友回復:
設計有問題,簡單的問題復雜化。不過當作業做還是可以的:select SUBSTR(XUHS,
case when POS=1 then 1
else INSTR(XUHS || ',',',',1,POS-1)+1
end,
case when POS=1 then INSTR(XUHS || ',',',',1,POS)-1
else INSTR(XUHS || ',',',',1,POS)-INSTR(XUHS || ',',',',1,POS-1)-1
end
) XUH,SUBJECT
from (select XUH xuhs,length(XUH)-length(replace(XUH,',',''))+1 NUMS,SUBJECT from T2) a,
(select rownum POS from T1) B
where B.POS<=a.NUMS
order by XUH,SUBJECT;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/70777.html
標籤:開發
下一篇:三個表的更改sql怎么寫啊
