close

這幾天剛好有需求需要撈取多列資料並合併,在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

 

 

arrow
arrow
    創作者介紹
    創作者 cs60811 的頭像
    cs60811

    IT的隱形人世界

    cs60811 發表在 痞客邦 留言(0) 人氣()