使用 SQL Server 的 GROUP BY 将唯一值聚合到逗号分隔的列表中
挑战:
给定一个包含重复条目的表,目标是按特定列对数据进行分组,并将另一列中的唯一值合并到单个逗号分隔的字符串中。
示例数据:
下表说明了初始数据集:
ID | ReportId | |
---|---|---|
1 | 1 | [email protected] |
2 | 2 | [email protected] |
3 | 1 | [email protected] |
4 | 3 | [email protected] |
5 | 3 | [email protected] |
目标结果:
期望的结果是一个包含合并电子邮件地址的表格:
ReportId | |
---|---|
1 | [email protected], [email protected] |
2 | [email protected] |
3 | [email protected], [email protected] |
使用 GROUP BY 和 STUFF 的解决方案:
STUFF
函数用于有效连接字符串,删除前导字符。 解决办法如下:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM your_table b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM your_table a GROUP BY ReportId;</code>
详细说明:
核心逻辑涉及STUFF
函数内的子查询。此子查询迭代与外部查询的当前行共享相同 ReportId
的所有行。 对于每个匹配行,它将一个逗号和 Email
值附加到累积字符串中。 然后,外部查询使用 GROUP BY
为每个唯一的 ReportId
聚合这些串联的电子邮件字符串。 STUFF
函数删除初始逗号和空格。
以上是如何使用 SQL Server 的 GROUP BY 将唯一值连接成逗号分隔的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!