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

我有个需求如下图

表的结构关系


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

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

 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 数据类型,则返回二进制数据。


备注
如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。
如果结果值大于返回类型支持的最大值,则产生错误。

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

 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

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

转载于:https://www.cnblogs.com/marx-luo/p/6713084.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值