博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把某一列值转换为逗号分隔字符串
阅读量:6524 次
发布时间:2019-06-24

本文共 853 字,大约阅读时间需要 2 分钟。

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

如下表[dbo].[SubScription]

 

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

 

Insus.NET是在结合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这个函数,是为了截除第一个逗号。

 

 

转载地址:http://kznbo.baihongyu.com/

你可能感兴趣的文章
AngularJS 拦截器和应用例子(转)
查看>>
SSE指令集学习:Compiler Intrinsic
查看>>
两种attach to process的方法
查看>>
WCF如何使用X509证书(安装和错误)(二)
查看>>
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
查看>>
iOS中--NSArray调用方法详解 (李洪强)
查看>>
java异步操作实例
查看>>
Centos6.8防火墙配置
查看>>
php and web service with wsdl
查看>>
collection set
查看>>
JAVA多线程的问题以及处理【转】
查看>>
【Java面试题】10 abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?...
查看>>
简单记录一次ORA-00600 kcratr_nab_less_than_odr
查看>>
【视频教程】一步步将AppBox升级到Pro版
查看>>
[原]好玩的Linux,关于时间cal命令
查看>>
[ssh]SSH反向通道端口转发,在本地调试微信支付回调
查看>>
Linux学习之CentOS(十八)--与Linux文件和目录管理相关的一些重要命令②
查看>>
vim一些挺方便的功能
查看>>
开源Java时间工具类Joda-Time体验
查看>>
如何新建UML2项目?详细操作步骤介绍
查看>>