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

SQL合并列与去重

--多行合并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
*/



转载于:https://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值