处理前
(第一种方法使用标量值函数)
--新建标量值函数
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**
处理后