本指南示範如何連接與 SQL Server 表中重複 ID 關聯的多個名稱,從而為每個唯一 ID 產生一個以逗號分隔的名稱清單。 我們將使用 STUFF
和 FOR XML PATH
的強大組合來實現這一目標。
場景:
想像一個具有重複 ID 和對應名稱的表。 目標是建立一個新列,其中包含每個 ID 的所有名稱,並用逗號整齊地分隔。
解:
此解決方案採用三步驟流程:
第 1 步:產生逗號分隔的 XML 字串
這個解決方案的核心在於利用 FOR XML PATH('')
從名稱產生逗號分隔的字串。
SELECT ',' + name FROM temp1 FOR XML PATH('')
這會產生一個 XML 字串,其中每個名稱前面都有一個逗號。
第 2 步:刪除前導逗號
第 1 步產生的 XML 字串以不必要的逗號開頭。 STUFF
優雅地刪除它。
STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH('')), 1, 1, '' )
STUFF
將第一個字元(前導逗號)替換為空字串。
第 3 步:加入、分組與最終結果
最後,我們將上述步驟與 JOIN
和 GROUP BY
子句結合以達到預期的結果。
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;
此查詢基於 temp1
將子查詢(產生逗號分隔的字串)與原始表 (ID
) 連接起來。 GROUP BY
子句確保每個唯一 ID 都發生串聯。 產生的 ConcatenatedNames
列包含每個 ID 的以逗號分隔的名稱清單。
以上是SQL Server 中的「STUFF」和「FOR XML PATH」如何連接名稱以尋找重複的 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!