前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询结果集合成一列的sqlserver实现方法stuff

查询结果集合成一列的sqlserver实现方法stuff

作者头像
逝兮诚
发布2019-10-30 12:11:06
2K0
发布2019-10-30 12:11:06
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/51778698

我有个需求如下图

表的结构关系

网上找了一下资料,发现可以用stuff+for xml path('')

for xml path('')的作用是将字符串先拼成一个

代码语言:javascript
复制
 SELECT
		*,
		RLCD = (select ',' + RLCD from WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD for xml path('')),
		RLNM=(select ',' + RLNM from WQ_ROLE_B WHERE RLCD IN(SELECT RLCD FROM WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD) for xml path('')) 
	FROM
		WQ_USER_B

得到的结果如下,但出现一个小问题,就是前面会多出一个","号,如下图

这时,可以用stuff()去除逗号

关于STUFF的介绍 STUFF ( character_expression , start , length ,character_expression ) 参数 character_expression 一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。 start 一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。start 可以是 bigint 类型。 length 一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 bigint 类型。 返回类型 如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据。 备注 如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。 如果结果值大于返回类型支持的最大值,则产生错误。

我只要把第一个字符串改成空字符串就可以了,代码如下

代码语言:javascript
复制
 SELECT
		*,
		RLCD = (select ',' + RLCD from WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD for xml path('')),
		RLNM=stuff((select ',' + RLNM from WQ_ROLE_B WHERE RLCD IN(SELECT RLCD FROM WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD) for xml path('')) , 1 , 1 , '')
	FROM
		WQ_USER_B

这样就得到了我想要的结果,大功告成

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档