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

来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:17 点击:

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

如下表[dbo].[SubScription]:
 
 
需要SELECT用户ID为15的所有订阅目录。如最终结果:
 
 
Insus.NET是在SQL Server 2012结合XML的FOR XML PATH()来实现。参考:
 
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 www.2cto.com
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这个函数,是为了截除第一个逗号。
 
 
 
 
作者 Insus.NET
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1