熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE行列轉換-拼成字符串

2013-11-13 15:34:17  來源: Oracle 

  前段時間使用ORACLE同事提出一個需求要求將有相同CODE的值連接成一個字符串這種小問題怎會難倒我於是提出方案!

  Sql代碼

  建表語句

  create table SP_ALERT_PA_GROUP

  (

  ID          INTEGER not null

  ALERTCODE   VARCHAR()

  PAINNERCODE VARCHAR()

  )

  insert into sp_alert_pa_group (ID ALERTCODE PAINNERCODE)

  values ( AL R);

  insert into sp_alert_pa_group (ID ALERTCODE PAINNERCODE)

  values ( AL R);

  insert into sp_alert_pa_group (ID ALERTCODE PAINNERCODE)

  values ( AL R);

  insert into sp_alert_pa_group (ID ALERTCODE PAINNERCODE)

  values ( AL R);

  要求顯示的結果

  ALERTCODE   PAINNERCODE

  AL  RR

  AL  RR

  使用自定義函數

  Sql代碼

  CREATE OR REPLACE FUNCTION getpa(alertcode VARCHAR)

  RETURN VARCHAR

  IS

  pastr VARCHAR();

  BEGIN

  FOR cur IN (SELECT painnercode FROM sp_alert_pa_group WHERE alertcode=alertcode) LOOP

  pastr := pastr||curpainnercode||;

  END LOOP;

  RETURN pastr;

  END;

  然後使用下面的SQL查詢即可!

  SELECT DISTINCT alertcode getpa(alertcode) FROM sp_alert_pa_group f

  使用ORACLE內置函數實現只支持G以上

  Sql代碼

  SELECT wmsyswm_concat(painnercode) FROM sp_alert_pa_group

  這個簡單明了但是我這裡不能用哎數據庫版本的問題太低

  使用SQL語句迭代(sys_connect_by_path)

  Sql代碼

  select substr(max(sys_connect_by_path(painnercode))) paramcode

  from (select a*row_number()over(order by painnercode) rn from sp_alert_pa_group a )

  start with rn=

  connect by rn=prior rn


From:http://tw.wingwit.com/Article/program/Oracle/201311/16949.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.