多行合并2列并去掉重复列

-- 多行合并2列并去掉重复列:  

create   table  tb 
(col1 
varchar ( 10 ), 
col2 
varchar ( 10 ), 
col3 
varchar ( 10 ), 
col4 
varchar ( 10 )) 
go  

insert  tb  select   ' 11111 '  ,    ' 222 '  ,       ' A '   ,     1   
insert  tb  select   ' 1111 '  ,    ' 333 '  ,        ' A '  ,      1   
insert  tb  select   ' 2222 '  ,    ' 999 '  ,        ' B '  ,      2   
insert  tb  select   ' 3333 '   ,   ' 111 '  ,        ' B '  ,      2   

go  
create   FUNCTION  dbo.f_str( @col3   varchar ( 10 )) 
RETURNS   varchar ( 8000
AS  
BEGIN  
declare   @str   varchar ( 8000
set   @str = ''  
select    @str = @str +  
case   
when   charindex ( ' , ' + col1 + ' - ' , ' , ' + @str + ' - ' ) = 0    then  col1 + ' - '  
else   ''   
end +  
case   
when   charindex ( ' - ' + col2 + ' , ' , ' - ' + @str + ' , ' ) = 0    then  col2 + ' , '   
else   ''   
end  
from  tb  
where  col3 = @col3  
return   
left ( @str , len ( @str ) - 1
END  
go  
select   distinct  newcol = dbo.f_str(col3),col3,col4   from  tb  

drop   table  tb 
drop   function  f_str 

/*  
newcol                      col3  col4 
-------------------------------------- 
11111-222,1111-333   A       1 
2222-999,3333-111    B        2 

*/ 


    本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638173.html,如需转载请自行联系原作者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值