本指南演示如何连接与 SQL Server 表中重复 ID 关联的多个名称,从而为每个唯一 ID 生成一个以逗号分隔的名称列表。 我们将使用 STUFF
和 FOR XML PATH
的强大组合来实现这一目标。
场景:
想象一个具有重复 ID 和相应名称的表。 目标是创建一个新列,其中包含每个 ID 的所有名称,并用逗号整齐地分隔。
解决方案:
该解决方案采用三步流程:
第 1 步:生成逗号分隔的 XML 字符串
该解决方案的核心在于利用 FOR XML PATH('')
从名称生成逗号分隔的字符串。
<code class="language-sql">SELECT ',' + name FROM temp1 FOR XML PATH('')</code>
这会生成一个 XML 字符串,其中每个名称前面都有一个逗号。
第 2 步:删除前导逗号
第 1 步生成的 XML 字符串以不必要的逗号开头。 STUFF
优雅地删除它。
<code class="language-sql">STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH('')), 1, 1, '' )</code>
STUFF
将第一个字符(前导逗号)替换为空字符串。
第 3 步:加入、分组和最终结果
最后,我们将上述步骤与 JOIN
和 GROUP BY
子句结合起来以达到预期的结果。
<code class="language-sql">SELECT ID, ConcatenatedNames = STUFF( (SELECT ',' + name FROM temp1 t1 WHERE t1.id = t2.id FOR XML PATH ('')) , 1, 1, '') FROM temp1 t2 GROUP BY id;</code>
此查询基于 temp1
将子查询(生成逗号分隔的字符串)与原始表 (ID
) 连接起来。 GROUP BY
子句确保每个唯一 ID 都发生串联。 生成的 ConcatenatedNames
列包含每个 ID 的以逗号分隔的名称列表。
以上是SQL Server 中的'STUFF”和'FOR XML PATH”如何连接名称以查找重复的 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!