簡化 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中文網其他相關文章!