请问如何将一个表中的不同记录合并到一个记录中??? 如我现在的表结构Test为
ID DATA
1 A
1 B
2 C
2 D
2 E
2 F 希望将其转换Test2为
ID DATA
1 A,B
2 C,D,E,F
ID DATA
1 A
1 B
2 C
2 D
2 E
2 F 希望将其转换Test2为
ID DATA
1 A,B
2 C,D,E,F
解决方案 »
- 如何用查询得到的时间与系统当前时间进行比较并输出
- ORACLE 10G 怎么不能解除用户的锁定
- Oracle游标循环取值,值再做作比较!
- 问个问题:使用编程语言调用oracle的存储过程,参数如何传递?
- 请教一个job
- 如何查看和设置oracle9i的restricted mode?
- 求ORACLE报的代码错误信息详细解释?
- 存储过程的递归调用
- 怎么启动不了“OracleOraHome81ManagermentServer”服务
- oracle外部连接怎么写?这条语句哪里错了?select n.news_id from news n outer join sp_news on sp_news.news_id=2
- 怎样在自定义函数中执行变量中的Sql语句?
- 怎样从varchar2数据中获得每一个ascii字符?
(v_c1 in varchar2,
v_result out varchar2)
as
cursor cur_ is
select data from table1
where id=v_c1;
begin
for v_c2 in cur_ loop
v_result := v_result||','||v_c2.data;
end loop;
end;这个试试
(select ltrim(max(sys_connect_by_path(a.data, ',')),',') data
from (select a.id,
a.data,
a.n,
lead(a.n) over(partition by a.id order by a.n) n1
from (select a.id,
a.data,
row_number() over(order by a.id, a.data desc) n
from test a) a) a
start with a.id = b.id
and a.n1 is null
connect by n1 = prior a.n) v1
from (select distinct a.id from test a) b
Insert Into henry_test values ('aa',1);
Insert Into henry_test values ('bb',1);
Insert Into henry_test values ('cc',1);
Insert Into henry_test values ('dd',2);
Insert Into henry_test values ('ee',2);
Insert Into henry_test values ('ff',3);
Insert Into henry_test values ('gg',3);
Insert Into henry_test values ('hh',3);
Commit;
create or replace function f_henry_ConcatRowsByColumn(
Column2Value in Varchar2, --分组该列的值
ColumnName1 in Varchar2, --要连接的列名
ColumnName2 in Varchar2, --用来做分组依据的列名
TableName in Varchar2 --表名
)
return varchar2 is
v_Result varchar2(32767);
type cur_type is ref cursor;
myCur cur_type;
v_Column1Value varchar2(4000);
begin
Open myCur for 'Select '||ColumnName1||' From '||TableName||' Where '||ColumnName2||' = '||Column2Value;
Loop
Fetch myCur Into v_Column1Value;
Exit When myCur%notfound;
v_Result:=v_Result||v_Column1Value||',';
End Loop;
Close myCur;
return(v_Result);
end f_henry_ConcatRowsByColumn;
/*
SQL> select B,f_henry_ConcatRowsByColumn(B,'A','B','henry_test') from henry_test group by B; B F_HENRY_CONCATROWSBYCOLUMN(B,'
--------------------------------------- --------------------------------------------------
1 aa,bb,cc,
2 dd,ee,
3 ff,gg,hh,
*/
没想到,不用存储过程或自定义函数也能实现,不过看上去是够复杂的,谢谢哈。
不过,问题来了,使用存储过程或自定义函数如你所写,那个效率高呢,决定因素是什么呢?