把某一列值转换为逗号分隔字符串

本文介绍如何通过SQL查询特定用户的所有订阅目录,并将结果整合以供前台显示,便于用户了解自己的订阅情况。

问题是这样的。从订阅表中SELECT某一个用户所有订阅的目录,然后可以绑定至前台显示给用户,让用户知道自己有哪些订阅和哪些目录没有订阅。

如下表[dbo].[SubScription]

 

需要SELECT用户ID为15的所有订阅目录。如最终结果:

 

Insus.NET是在SQL Server 2012结合XML的FOR XML PATH()来实现。参考:

ExpandedBlockStart.gif View Code
SELECT  [ UsersId ][ SubscriptionCataLog ]  =  STUFF(( SELECT  ' , '  +  CAST( [ SubscriptionCatalog_nbr ]  AS  NVARCHAR( MAX))  
FROM  [ dbo ]. [ SubScription ]  WHERE ( [ UsersId ]  = s. [ UsersId ])
FOR XML PATH ( '')), 1, 1, '')
FROM  [ dbo ]. [ SubScription ] s
WHERE  [ usersId ]  =  15
GROUP  BY  [ UsersId ] 

 

首先是在数据表FROM [dbo].[SubScription],条件为WHERE [usersId] = 15过滤出用户所有订阅目录,并分组GROUP BY [UsersId]

然后把[SubscriptionCatalog_nbr]由整型转为字符串:CAST([SubscriptionCatalog_nbr] AS NVARCHAR(MAX)

再用','与之串连起来,最后用FOR XML PATH ('')方法,把每一行数据串连接起。

详细一些,可以看到:

SELECT  ' , '  +  CAST( [ SubscriptionCatalog_nbr ]  AS  NVARCHAR( MAX))  
FROM  [ dbo ]. [ SubScription ]
FOR XML PATH ( '')

 

执行得到的结果:

 

STUFF这个函数,是为了截除第一个逗号。

 

 

转载于:https://www.cnblogs.com/insus/archive/2012/03/28/2421230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值