【问题标题】:How to avoid duplicates in the STRING_AGG function SQL Server如何避免 STRING_AGG 函数 SQL Server 中的重复
【发布时间】:2020-01-12 11:54:30
【问题描述】:

我正在测试SQL中的一个查询,其中我需要以逗号分隔列表的形式连接值,并且它有效,我只是有重复值的问题。

这是查询:

SELECT t0.id_marcas                                AS CodMarca, 
       t0.nombremarcas                             AS NombreMarca, 
       t0.imagenmarcas, 
       (SELECT String_agg((t2.name), ', ')
        FROM exlcartu_devcit.store_to_cuisine t1 
               INNER JOIN exlcartu_devcit.cuisine t2 
                       ON t1.cuisine_id = t2.cuisine_id 
        WHERE  store_id = (SELECT TOP 1 store_id 
                           FROM   exlcartu_devcit.store 
                           WHERE  id_marcas = t0.id_marcas 
                                  AND status = 1)) AS Descripcion, 
       t0.logo, 
       t0.imagen, 
       (SELECT TOP 1 preparing_time 
        FROM   exlcartu_devcit.store 
        WHERE  id_marcas = t0.id_marcas 
               AND status = 1)                     AS Tiempo, 
       t0.orden, 
       (SELECT TOP 1 Avg(minimum_amount) 
        FROM   exlcartu_devcit.store_delivery_zone 
        WHERE  id_marcas = t0.id_marcas)           AS MontoMinimo 

FROM   exlcartu_devcit.[marcas] t0 

我认为解决方案可能只是在查询中添加一个DISTINCT以避免这样的重复值......

(SELECT STRING_AGG(DISTINCT (t2.name),  ', ') AS Descripcion

但显然STRING_AGG() 函数不支持它,知道如何避免重复值吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

最简单的方法就是select from select,像这样:

with dups as (select 1 as one union all select 1 as one)
select string_agg(one, ', ') from (select distinct one from dups) q;

对比原版

with dups as (select 1 as one union all select 1 as one)
select string_agg(one, ', ') from dups;

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2019-09-24
    相关资源
    最近更新 更多