首頁 >資料庫 >mysql教程 >如何消除 SQL Server STRING_AGG 函數中的重複?

如何消除 SQL Server STRING_AGG 函數中的重複?

Patricia Arquette
Patricia Arquette原創
2025-01-24 07:02:10587瀏覽

SQL Server 的 STRING_AGG 功能:刪除重複值

本文解決了在 SQL Server 2017 及更高版本中消除 STRING_AGG 函數中的重複值的挑戰。 標準 STRING_AGG 函數不直接支援 DISTINCT 關鍵字進行唯一值聚合。

How to Eliminate Duplicates in SQL Server's STRING_AGG Function?

問題:直接使用 DISTINCTSTRING_AGG 來計算和連接唯一值是不可能的。

目標: 使用 STRING_AGG.

產生唯一值的串聯字串。

範例:

讓我們考慮一個包含 SitingsStateCity 欄位的 Siting 表:

<code>ID | State    | City      | Siting
---------------------------------
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</code>

使用 COUNT(DISTINCT Siting)STRING_AGG(Siting, ',') 的簡單查詢會產生:

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,bird,bird,dog,bird

但是,所需的輸出應該從 Phoenix 的「動物」列中刪除重複項:

State City # Of Types Animals
Arizona Flagstaff 1 dog
Florida Orlando 2 dog,bird
Arizona Phoenix 2 bird,dog

解:雙重分組法

為了實現這個目標,我們利用通用表表達式 (CTE) 進行兩步驟分組過程:

<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')
    ) AS F (ID, State, City, Siting)
),
CTE_Animals AS (
    SELECT
        State, City, Siting
    FROM Sitings
    GROUP BY State, City, Siting
)
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>

結果:此查詢成功產生所需的輸出:

State City # Of Sitings Animals
Arizona Flagstaff 1 dog
Arizona Phoenix 2 bird,dog
Florida Orlando 2 dog,bird

這種雙分組技術首先按StateCitySiting 進行分組,以消除每個城市內的重複項,然後再次按StateCity 進行分組以連接唯一的地點。

以上是如何消除 SQL Server STRING_AGG 函數中的重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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