oracle中自定义聚合函数及用法

也是比较老套的话题了 呵呵
表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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值