使用 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中文網其他相關文章!