首页 >数据库 >mysql教程 >如何消除 SQL Server STRING_AGG 函数中的重复项?

如何消除 SQL Server STRING_AGG 函数中的重复项?

Patricia Arquette
Patricia Arquette原创
2025-01-24 07:02:10585浏览

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