在 SQL Server 的 STRING_AGG 函數中處理重複值
SQL Server 2017 中引入的 STRING_AGG 函數將列值連接成單一字串。 但是,它本身並不能刪除重複項。 本文詳細介紹了在聚合字串中實作不同值的兩步驟方法。
兩步驟解
關鍵是使用 STRING_AGG 之前執行不同的操作。這涉及兩個階段的分組過程:
對不同值進行初始分組: 首先,按您希望唯一的欄位以及最終結果所需的任何其他必要列對資料進行分組。 這會刪除來源中的重複行。
<code class="language-sql">WITH Sitings AS ( SELECT * FROM (VALUES (1, 'Florida', 'Orlando', 'bird'), (2, 'Florida', 'Orlando', 'dog'), (3, 'Arizona', 'Phoenix', 'bird'), (4, 'Arizona', 'Phoenix', 'dog'), (5, 'Arizona', 'Phoenix', 'bird'), (6, 'Arizona', 'Phoenix', 'bird'), (7, 'Arizona', 'Phoenix', 'bird'), (8, 'Arizona', 'Flagstaff', 'dog') ) F (ID, State, City, Siting) ), CTE_Animals AS ( SELECT State, City, Siting FROM Sitings GROUP BY State, City, Siting )</code>
最終分組和聚合:接下來,按所需列對第一步的結果進行分組,並應用 STRING_AGG 連接不同的值。
<code class="language-sql">SELECT State, City, COUNT(1) AS [# Of Sitings], STRING_AGG(Siting,',') AS Animals FROM CTE_Animals GROUP BY State, City ORDER BY State, City;</code>
關於字串長度的重要說明:
如果您的連接字串可能超過 VARCHAR 的 8000 個字元限制,請在使用 VARCHAR(MAX)
之前將值轉換為 STRING_AGG
:
<code class="language-sql">STRING_AGG(CAST(Siting AS VARCHAR(MAX)), ',') AS Animals</code>
此方法有效地產生僅包含唯一值的 STRING_AGG
結果。
以上是如何從 SQL Server 中的 STRING_AGG 輸出中刪除重複值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!