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

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

Patricia Arquette
发布: 2025-01-24 07:02:10
原创
583 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板