Oracle多行记录连接的方法

今天,同事问了我一个oracle的问题,在他查询的表中有多行数据除了一个字段外都是相同的,他想合并成一条,并且把那个不同的字段用逗号连接起来,我想了一会儿,觉得除了相关子查询我想不出其他方法来。
但是我试验后发现,思路到是对,但是因为我不清楚有多少一样的,所以我觉得应该做成一个function来循环

SQL> desc t2
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(10)

SQL> select * from t2;

ID NAME
---------- ----------
1 aa
1 bb
1 cc
2 asd
2 asdvvv


要求得到的结果是这样的

1 aa,bb,cc
2 asd,asdvvv


根据需要得到的结果我创建了一个function:

create or replace function v_t2(v_id in number)
return varchar2
is
v_str varchar2(1000);;--连接后字符串
str varchar2(10) default null;;--连接符号
begin
for s in (select name from t2 where id=v_id) loop
v_str := v_str ||str||s.name;
str :=',';
end loop;
return v_str;
end;

然后使用后得到以下结果

SQL> select distinct id,v_t2(id) from t2;

ID V_T2(ID)
---------- ------------------------------
1 aa,bb,cc
2 asd,asdvvv


我在google下搜索了下,oracle可以自定义聚合函数来搞定这个问题,不过语句有点复杂,要多学习学习.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值