大家好,我有一个有 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 不是常量,它们总是根据运算符(operator)输入而变化,因此我无法真正指定数字,我只需要找到一种方法来编写将表中所有类似的 loadid 分组的代码,并且将 loadID 的注释连接在一起,所以基本上我希望输出看起来像这样
LoadID coment
1234 comment1,comment2,comment3
12345 comment4
28366356 comment5,comment6
1212 comment7
最佳答案
在 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()'
。老实说,我根本没有使用过这个构造。
关于sql - 没有聚合函数和行分组的分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48521913/