ORACLE 行列轉換之拼成字串

2021-08-30 17:21:39 字數 2320 閱讀 8993

前段時間使用oracle,同事提出乙個需求,要求將有相同code的值連線成乙個字串。這種小問題怎會難倒我,於是提出方案!

建表語句:

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,

1.使用自定義函式

create or replace function getpa(alertcode varchar2)

return varchar2

ispastr 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以上

select wmsys.wm_concat(painnercode) from sp_alert_pa_group

這個簡單明瞭,但是我這裡不能用,哎資料庫版本的問題。太低

3.使用sql語句迭代(sys_connect_by_path)

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

公司裡還使用db2,下面是db2中使用自定義函式:

create function getpa(v_alertcode varchar(8))

returns varchar(4000)

language sql

specific getpa --specific getpa 指定函式名稱

gp: begin atomic

declare pastr varchar(4000) default '';

for cur as

select painnercode from sp_alert_pa_group where alertcode=v_alertcode

doset pastr=pastr || cur.painnercode || ',';

end for;

return pastr;

end gp;

此處,除了表名不能作為引數傳遞以外,列都可以用引數代替!

Oracle行列轉換

1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...

Oracle行列轉換

行轉列 select count over cnt,rn,str from select rownum rn,substr a.str,instr a.str,1,a.n 1,instr a.str,1,a.n 1 instr a.str,1,a.n 1 str from select a,b,c,...

oracle 行列轉換

q 如何實現行列轉換 a 1 固定列數的行列轉換 如student subject grade student1 語文 80 student1 數學 70 student1 英語 60 student2 語文 90 student2 數學 80 student2 英語 100 轉換為 語文 數學 英...