如何避免 STRING_AGG 函数中的重复

5 t-sql 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
Run Code Online (Sandbox Code Playgroud)

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

我不知道如何将DISTINCT实现到STRING_AGG函数中

欢迎任何其他解决方案,但我认为它应该与 DISTINCT 功能一起使用。

小智 6

看起来 unique 不起作用,所以您应该做的是将整个查询放入子查询中,删除其中的重复项,然后STRING_AGG对没有重复项的数据执行操作。

SELECT STRING_AGG(data)
FROM (
   SELECT DISTINCT FROM ...
)
Run Code Online (Sandbox Code Playgroud)