這幾天剛好有需求需要撈取多列資料並合併,在Oracle db 9i下,因少了些函數使用,所以只能土法煉鋼啦!!
廢話不多說,請見以下範例
SELECT aa.insid,
Max(Decode(rn, 1, (aa.item1 || '_' || aa.item3), NULL)) ||
Max(Decode(rn, 2, ';' || (aa.item1 || '_' || aa.item3), NULL)) ||
Max(Decode(rn, 3, ';' || (aa.item1 || '_' || aa.item3), NULL)) AS result
FROM (SELECT insid,
item1,
item3,
Row_number() over(PARTITION BY insid ORDER BY item1) AS rn
FROM art23731341965796109item203) aa,
art23731341965796109_ins bb
where aa.insid = bb.insid
GROUP BY aa.insid
ORDER BY 1;
解釋:
在from表中,使用select子句,先計算出insid重複的個數,並給上排名,最後統整出表aa,在aa中含有原始資料以及多了一欄rn,在select的部分使用decode的方式取代case when來當作判斷,判斷rn欄位如果是1則先擺入(aa.item1||'_'||aa.item3)字串,如不是則擺入null一直重複的擺入至完成,之中使用aa.insid 來進行group by。