【Transact-SQL】通过递归来实现:将多条记录的某个字段的值,用斜杠拼接在一起...

 需要把表@tt中的idd相同的记录中tchar字段的内容拼接在一起,结果如下

1,'abc/xyz/ggg'

2,'111/soft'

 

实验代码如下:

 

declare @tt table(idd int,tchar varchar(10))

insert into @tt    
select 1,'abc' union all
select 1,'xyz' union all
select 1,'ggg' union all
select 2,'111' union all
select 2,'soft' 


;with c
as
(
select idd,
       tchar,
	   row_number() over(partition by idd order by tchar) as row
from @tt 
),

cc   --递归CTE
as
(
	select idd,
           cast(tchar as varchar(1000)) as ch,
		   row
	from c 
	where row = 1

    union all

	select cc.idd,
           ch=cast(cc.ch+'/'+c.tchar as varchar(1000)),
           c.row
	from cc
	inner join c 
			on c.idd = cc.idd
			   and c.row = cc.row+1
),
ccc
as
(
select idd,ch,row,
       row_number() over(partition by idd order by row desc) as rownum
from cc
)

select * from ccc 
where rownum=1
/*
idd	ch	        row	rownum
1	abc/ggg/xyz	3	1
2	111/soft	2	1
*/


 

转载于:https://www.cnblogs.com/momogua/archive/2011/11/19/8304639.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值