也是比较老套的话题了 呵呵
表A 表B
p_id p_name r_id r_name r_p_id
1001
测试项目1 100 中标单位1 1001
1002 测试项目2 101 中标单位2 1001
103 中标单位3 1001
103 中标单位1 1002
103 中标单位2 1002
有时候我们需要得到类似下面的列表
1001 测试项目1 中标单位1/中标单位2/中标单位3
1001 测试项目2 中标单位1/中标单位2
先创建一个函数
CREATE OR REPLACE FUNCTION STRCAT ( str_in in varchar2 )--分类字段
return varchar2
is
str_list varchar2(4000) default null;--连接后字符串
str varchar2(20) default null;--连接符号
begin
for x in ( select r_name from B where r_p_id= str_in ) loop
str_list := str_list || str || to_char(x.r_name);
str := '/';
end loop;
return str_list;
end;
下面取列表
select p_id,p_name ,STRCAT(p_id) as hitBiders from A
也可以 select p_id,p_name ,(select STRCAT(p_id) from dual) as hitBiders from A
当然建议用第一个语句
若是在SQL SERVER里可以象下面这样写
create function dbo.str_cat(@id int)
returns varchar(3000)
as
begin
declare @s varchar(8000)
select @s = ' '
select @s = @s + r_name + '/ ' from b where r_p_id = @id
return left(@s,len(@s)-1)
end
或者
create function dbo.str_cat(@id int)
returns varchar(3000)
as
begin
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '/ '+ r_name from b where r_p_id =@id
return stuff(@sql,1,1, ' ')
end
go
转载于:https://www.cnblogs.com/peaceli/archive/2008/02/01/1060814.html