SQL中根据相同ID合并多条数据信息

处理前

(第一种方法使用标量值函数)

--新建标量值函数

ALTER function [dbo].[r](@P_ID int )

returns varchar(100)

as

begin 

 declare @s varchar(100)

 select @s=isnull(@s+',','')+rtrim(面料纹理) FROM NewLiningDocument WHERE P_ID = @P_ID

 return @s

end;


--根据相同ID把多行信息,合并和一条信息

SELECT ID,dbo.r(P_ID) AS 面料纹理 FROM NewLiningDocument GROUP BY P_ID

(第二种方法直接处理)

SELECT P_ID,内容 = STUFF(

            (SELECT ','+rtrim(面料纹理) FROM NewLiningDocument WHERE st.P_ID = P_ID ORDER BY ID FOR XML PATH('')

    ),1,1,''

) 

FROM NewLiningDocument st GROUP BY P_ID

--(注:STUFF是将拼接完成后字符第一个','替换成'')(第一个参数为要操作的字符串,第二个为从第几个开始替换下标从1开始,第三个参数为替换的个数,第四个参数为替换的字符)
--简单说明:select STUFF('abc',1,1,'*') 执行结果为:*abc
--         select STUFF('abc',1,0,'*') 执行结果为:*bc
--         select STUFF('abc',2,2,'*') 执行结果为:a**

 

处理后

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值