在 SQL Server 中使用逗號分隔的字串聚合資料
SQL Server 的 GROUP BY
子句非常適合資料聚合。 但是如何將分組行中的多個值組合成一個以逗號分隔的字串?
挑戰:
想像一張這樣的桌子:
<code>ID ReportId Email 1 1 a@domain.com 2 2 b@domain.com 3 1 c@domain.com 4 3 d@domain.com 5 3 e@domain.com</code>
目標是按 ReportId
分組,並將電子郵件連接到每個報告的逗號分隔清單。
解決方案:子查詢和 FOR XML PATH
以下是如何使用子查詢和 FOR XML PATH
方法來實現此目的:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM table_name b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM table_name a GROUP BY ReportId;</code>
說明:
SELECT
語句擷取與特定 ReportId
相關的所有電子郵件。 ''
確保不會建立父節點。 STUFF
函數刪除 SELECT
語句新增的前導逗號和空格,從而產生乾淨的逗號分隔字串。 結果:
查詢將產生以下輸出:
<code>ReportId Email 1 a@domain.com, c@domain.com 2 b@domain.com 3 d@domain.com, e@domain.com</code>
這有效地將多個電子郵件地址合併為每個 ReportId
的單一逗號分隔字串。 雖然這種方法效果很好,但請考慮探索其他特定於資料庫的函數,例如 STRING_AGG
(在更高的 SQL Server 版本中可用),以獲得可能更有效的解決方案。
以上是如何在 SQL Server 中使用 GROUP BY 將多個值連接成逗號分隔的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!