前段时间使用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