首頁 >資料庫 >mysql教程 >如何從 SQL Server 中的 STRING_AGG 輸出中刪除重複值?

如何從 SQL Server 中的 STRING_AGG 輸出中刪除重複值?

Barbara Streisand
Barbara Streisand原創
2025-01-24 06:57:09314瀏覽

How Can I Remove Duplicate Values from STRING_AGG Output in SQL Server?

在 SQL Server 的 STRING_AGG 函數中處理重複值

SQL Server 2017 中引入的 STRING_AGG 函數將列值連接成單一字串。 但是,它本身並不能刪除重複項。 本文詳細介紹了在聚合字串中實作不同值的兩步驟方法。

兩步驟解

關鍵是使用 STRING_AGG 之前執行不同的操作。這涉及兩個階段的分組過程:

  1. 對不同值進行初始分組: 首先,按您希望唯一的欄位以及最終結果所需的任何其他必要列對資料進行分組。 這會刪除來源中的重複行。

    <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>
  2. 最終分組和聚合:接下來,按所需列對第一步的結果進行分組,並應用 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中文網其他相關文章!

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