我的查询如下:
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功能。
答案 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