如何避免STRING_AGG函数中的重复

时间:2018-02-26 09:59:55

标签: tsql ssms distinct string-aggregation

我的查询如下:

select 
    u.Id,
    STRING_AGG(sf.Naziv, ', ') as 'Ustrojstvena jedinica',
    ISNULL(CONVERT(varchar(200), (STRING_AGG(TRIM(p.Naziv), ', ')), 121), '') 
    as 'Partner',

from Ugovor as u

        left join VezaUgovorPartner as vup
            on vup.UgovorId = u.Id AND vup.IsDeleted = 'false'
        left join [TEST_MaticniPodaci2].dbo.Partner as p
            on p.PartnerID = vup.PartnerId
        left join [dbo].[VezaUgovorUstrojstvenaJedinica] as vuu
            on vuu.UgovorId = u.Id
        left join [TEST_MaticniPodaci2].hcphs.SifZavod as sf
            on sf.Id = vuu.UstrojstvenaJedinicaId
        left join [dbo].[SifVrstaUgovora] as vu
            on u.VrstaUgovoraId = vu.Id

  group by u.Id, sf.Naziv

我的问题是我可以有更多的sf.Naziv,也只有一个sf.Naziv所以我必须检查是否有一个,然后只显示一个结果,如果有两个或更多显示更多的结果。但是现在的问题是,当我只有一个sf.Naziv时,查询会返回两个同名的sf.Naziv,因为在第一个STRING_AGG中我有更多关于p.Naziv的记录。

我不知道如何将 DISTINCT 实施到 STRING_AGG 功能

欢迎任何其他解决方案,但我认为它应该适用于DISTINCT功能。

2 个答案:

答案 0 :(得分:2)

看起来完全不同是行不通的,所以您应该做的是将整个查询放在子查询中,在其中删除重复项,然后对没有重复项的数据进行STRING_AGG

SELECT STRING_AGG(data)
FROM (
   SELECT DISTINCT FROM ...
)

答案 1 :(得分:0)

我喜欢这种格式以显示不同的值: (d是必需的,但您可以在其中使用任何变量名)

SELECT STRING_AGG(LoadNumber, ',') as LoadNumbers FROM (SELECT DISTINCT LoadNumber FROM [ASN]) d