首页 > 数据库 > mysql教程 > 如何从 SQL Server 中的 STRING_AGG 输出中删除重复值?

如何从 SQL Server 中的 STRING_AGG 输出中删除重复值?

Barbara Streisand
发布: 2025-01-24 06:57:09
原创
310 人浏览过

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

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