首頁 >資料庫 >mysql教程 >如何在 SQL Server 的 GROUP BY 子句中有效地連接字串?

如何在 SQL Server 的 GROUP BY 子句中有效地連接字串?

Linda Hamilton
Linda Hamilton原創
2025-01-25 02:17:08379瀏覽

How Can I Efficiently Concatenate Strings within SQL Server's GROUP BY Clause?

簡化 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 PATHSTUFF 的強大組合。 這種方法非常高效,適用於 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn