日期:2014-05-17  浏览次数:21005 次

用SQL语句怎样实现这种效果?
有一Oracle表,内容如下:
name                   alias                 age
  张三                     23
  李四                     24
  王五
  卢芳                   小芳
  操利                              
  李焱
  季霞                   小霞                   22
  周中继              
  张延                   张慎                  
  孙起                                           21
…………
…………

我想把name字段中的各个值用“,”连接起来,怎么办呢?
比如上表的结果应该是:
张三,李四,王五,卢芳,…………

这样的SQL语句怎样写呢?

------解决方案--------------------
参考

SQL> select * from test;


ID TME

---- ----------

A 1

B 1

C 1

D 1

E 1

F 2

G 2


已选择7行。


SQL> select tme, substr(max(sys_connect_by_path(id, ', ')), 2) catstr

2 from (select id, tme, row_number() over(partition by tme order by 1) rn

3 from test)

4 start with rn = 1

5 connect by rn - 1 = prior rn and tme = prior tme

6 group by tme;


TME CATSTR

---------- --------------------

1 A,B,C,D,E

2 F,G


SQL>


------解决方案--------------------
也可以写个函数
参考

--测试数据
create table tbale1(no int, content varchar2(100));
insert into tbale1
select 1, 'aa ' from dual union all
select 1, 'bb ' from dual union all
select 1, 'cc ' from dual union all
select 2, 'mm ' from dual union all
select 2, 'nn ' from dual union all
select 3, 'oo ' from dual;
--建立函数
create or replace function sum_string(v_sql varchar2)
return varchar2
as
type cur_alldata is ref cursor;
l_alldata cur_alldata;
v_row varchar2(99);
v_sum varchar2(3999);
begin
open l_alldata for v_sql;
loop
fetch l_alldata into v_row;
exit when l_alldata%notfound;
v_sum := v_sum|| ', '||v_row;
end loop;
v_sum := substr(v_sum,2);
close l_alldata;
return v_sum;
end;
--执行查询
select distinct no,sum_string( 'select content from tbale1 where no= ' ' '||no|| ' ' ' group by no,content ') from tbale1
--执行结果
1 aa,bb,cc
2 mm,nn
3 oo