大家好我有一张有2列的桌子
LoadID coment
1234 comment1
1234 comment2
1234 comment3
12345 comment4
28366356 comment5
28366356 comment6
1212 comment7
我正在尝试运行此代码以将特定LoadID的注释组合在一起,这应该看起来像这样(comment1,comment2,comment3)
SELECT coment + ',' AS 'data()'
FROM TB_SOT_Comment
Where LoadID = '1234'
FOR XML PATH('')
代码工作正常但问题是我想更改where子句以对所有loadID执行相同的操作。问题是loadID不是常量,并且它们根据操作员输入一直在变化,因此我无法真正指定我只需要找到一种编写代码的方法来编写所有的表中的类似loadid并将该loadID的注释连接在一起,所以基本上我希望输出看起来像这样
LoadID coment
1234 comment1,comment2,comment3
12345 comment4
28366356 comment5,comment6
1212 comment7
答案 0 :(得分:3)
在SQL Server中 - 在最新版本之前 - 您将使用相关子查询:
SELECT l.LoadId,
STUFF( (SELECT ',' + comment -- AS 'data()'
FROM TB_SOT_Comment c2
WHERE c2.LoadID = l.LoadId
FOR XML PATH ('')
), 1, 1, ''
) as comments
FROM (SELECT DISTINCT LoadId FROM TB_SOT_Comment) l;
注意:
WHERE
)是此查询的关键。STUFF()
,因此评论不会以逗号结尾。AS 'data()'
。说实话,我根本就没有使用过这种结构。答案 1 :(得分:0)
使用Distinct Keyword删除重复项
select distinct LoadId,(SELECT coment + ',' AS 'data()' FROM TB_SOT_Comment Where LoadID = t.LoadID FOR XML PATH('')) from TB_SOT_Comment t