首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中有效地將多個子查詢行組合成單一分隔欄位?

如何在 SQL Server 中有效地將多個子查詢行組合成單一分隔欄位?

DDD
發布: 2025-01-22 00:32:38
原創
277 人瀏覽過

How to Efficiently Combine Multiple Subquery Rows into a Single Delimited Field in SQL Server?

簡化 SQL Server 資料操作:將子查詢行組合成單一分隔欄位

複雜的資料操作任務通常涉及編寫繁瑣的程式碼,例如基於遊標的解決方案。 一個常見的挑戰是將多個子查詢行組合成帶有分隔符號的單一欄位。 本文提出了冗長遊標實現的有效替代方案。

考慮兩個表,“車輛”和“位置”,其目標是將與每輛車關聯的城市名稱合併到單個“位置”列中,以逗號分隔。 傳統的遊標方法需要大量編碼。

SQL Server 2005 及更高版本:

更優雅的解決方案使用 FOR XML PATH 指令。這會從「Locations」表產生 XML,用逗號分隔城市名稱,然後使用 STUFF 函數將 XML 轉換回文字字串:

<code class="language-sql">SELECT [VehicleID], [Name],
       (STUFF((SELECT ',' + [City]
               FROM [Location]
               WHERE (VehicleID = Vehicle.VehicleID)
               FOR XML PATH('')), 1, 1, '')) AS Locations
FROM [Vehicle]</code>
登入後複製

SQL Server 2017 及更高版本:

為了提高效能和簡單性,SQL Server 2017 及更高版本提供了 STRING_AGG 函數。此函數直接將值聚合到單一字串中,接受分隔符號作為第二個參數:

<code class="language-sql">SELECT [VehicleID], [Name],
       (SELECT STRING_AGG([City], ', ')
        FROM [Location]
        WHERE VehicleID = V.VehicleID) AS Locations
FROM [Vehicle] V</code>
登入後複製

這兩種方法都有效地將多個子查詢行組合到單一分隔欄位中,與基於遊標的方法相比提供了顯著改進,從而產生更清晰、更有效率的程式碼並縮短了開發時間。 選擇適合您的 SQL Server 版本的方法。

以上是如何在 SQL Server 中有效地將多個子查詢行組合成單一分隔欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板