Мой запрос ниже:
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.
STRING_AGG
или реализуйте пользовательский агрегат SQ CLR — они поддерживают разные. - person gotqn   schedule 26.02.2018