当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
ORACLE行列转换-拼成字符串
发布时间:2010/7/1 11:06:09 来源:城市学习网 编辑:ziteng
  前段时间使用ORACLE,同事提出一个需求,要求将有相同CODE的值连接成一个字符串。这种小问题怎会难倒我,于是提出方案!
  Sql代码
  建表语句:
  create table SP_ALERT_PA_GROUP
  (
  ID          INTEGER not null,
  ALERTCODE   VARCHAR2(8),
  PAINNERCODE VARCHAR2(20)
  )
  insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
  values (10081, 'AL000027', 'R0000005');
  insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
  values (10082, 'AL000027', 'R0000006');
  insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
  values (10083, 'AL000026', 'R0000001');
  insert into sp_alert_pa_group (ID, ALERTCODE, PAINNERCODE)
  values (10084, 'AL000026', 'R0000002');
  要求显示的结果
  ALERTCODE   PAINNERCODE
  AL000027  R0000005,R0000006,
  AL000026  R0000001,R0000002,[NextPage]   1.使用自定义函数
  Sql代码
  CREATE OR REPLACE FUNCTION getpa(alertcode VARCHAR2)
  RETURN VARCHAR2
  IS
  pastr VARCHAR2(4000);
  BEGIN
  FOR cur IN (SELECT painnercode FROM sp_alert_pa_group WHERE alertcode=alertcode) LOOP
  pastr := pastr||cur.painnercode||',';
  END LOOP;
  RETURN pastr;
  END;
  然后使用下面的SQL查询即可!
  SELECT DISTINCT alertcode ,getpa(alertcode) FROM sp_alert_pa_group f
  2.使用ORACLE内置函数实现。只支持10G以上
  Sql代码
  SELECT wmsys.wm_concat(painnercode) FROM sp_alert_pa_group
  这个简单明了,但是我这里不能用,哎数据库版本的问题。太低
  3.使用SQL语句迭代(sys_connect_by_path)
  Sql代码
  select substr(max(sys_connect_by_path(painnercode,',')),2) paramcode
  from (select a.*,row_number()over(order by painnercode) rn from sp_alert_pa_group a )
  start with rn=1
  connect by rn-1=prior rn
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved