sql做统计时,遇到难题,不想写存储过程来实现(因为我不会写存储过程,哈哈),网上找到灰常有用的文章,亲测有效,现摘抄下来,做个笔记,原地址:http://www.dedecms.com/knowledge/data-base/oracle/2013/0204/21403.html
以下逗号都换成“;”就OK
解决方案:
SQL> select * from test;
A_URS_ID
--------------------------------------------------
123,125
123,124,125
SQL> select * from test1;
URS_ID URS_NAME
---------- --------------------
123 name1
124 name2
125 name3
SQL> with split_data as (
select key, rn, substr(str, instr(str, ',', 1, rn)+1,
instr(str, ',', 1, rn+1) - instr(str, ',', 1, rn) - 1) str
from (select a_urs_id key, ','||a_urs_id||',' str from test) a,
(select rownum rn from dual connect by rownum < 10) b
where instr(str, ',', 1, rn+1) > 0 )
select key, substr(max(sys_connect_by_path(urs_name, ',')), 2) a_name
from split_data a, test1 b
where a.str = b.urs_id
start with rn = 1
connect by key = prior key and rn-1 = prior rn
group by key;
KEY A_NAME
-------------------- ------------------------------------------------------------
123,124,125 name1,name2,name3
123,125 name1,name3