簡化 SQL Server GROUP BY
子句中的字符串連接
本指南演示了一種在 SQL Server 中的 GROUP BY
子句中連接字符串的簡潔方法,避免使用游標或循環等效率較低的技術。 目標是像這樣轉換數據:
<code class="language-sql">id | Name | Value ---|-----|------ 1 | A | 4 1 | B | 8 2 | C | 9</code>
轉換為以下格式:
<code class="language-sql">id | Column ---|------- 1 | A:4, B:8 2 | C:9</code>
該解決方案利用了 FOR XML PATH
和 STUFF
的強大組合。 這種方法非常高效,適用於 SQL Server 2005 及更高版本。
這是 SQL 查詢:
<code class="language-sql">CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT); INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4); INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8); INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9); SELECT [ID], STUFF(( SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) FROM #YourTable WHERE (ID = Results.ID) FOR XML PATH(''), TYPE ).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS NameValues FROM #YourTable Results GROUP BY ID; DROP TABLE #YourTable;</code>
內部 SELECT
語句使用 FOR XML PATH('')
構造連接字符串,創建 XML 表示形式,然後使用 .value()
將其轉換回字符串。 STUFF
函數優雅地刪除了開頭的逗號和空格。 這種方法避免了迭代方法的性能開銷。
以上是如何在 SQL Server 的 GROUP BY 子句中有效地連接字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!