MSSQL String Agg — Group Concat işlemlerinin yapılması

Haktan AKDAĞ
1 min readSep 19, 2023

Merhaba arkadaşlar;

Geçtiğimiz günlerde mssql’e ait string_agg fonksiyonunu kullanmış bulundum. Bulunduğuma bulunmuşluğuma pişman oldum, Yazılımımı kuracağım sistemin birinde mssql’in eski versiyonuna denk geldiğimde tüm hayallerim başıma yıkılmıştı.

Çünkü string_agg fonksiyonu mssql’in eski versiyonlarında yok. Bunu çözmek için farklı bir yol aramaya girdim. Ve tüm yazılım kodlarımı değiştirmek zorunda kaldım.

String agg yerine sql de başka bir takla atarak işi çözebilirdim ama bazen sizin teknik borç oluşturmanız bir süre sonra sizi sıkıntıya düşürebilecekti.

Uygulamayı 10–15 farklı yere lisanslayacaksanız bir sorun olmayabilir, fakat 100 den fazla yere lisansladığınızda arkanızda bıraktığınız teknik borçlar sizi müşterinize karşı mahçup edecektir.

Neyse çok uzatmadan konuya gireyim.

Yapmak istediğim işlem ;

select SALESMANREF,STRING_AGG(CLIENTREF,'') as x from LG_001_SLSCLREL group by SALESMANREF

Baktığınızda satış temsilcilerinin client referanslarını yan yana yazdırmak istiyorum.

Tek satır kod ile bunu mssql ‘in yeni versiyonunda başarabilmişken, eski versiyonlarda bu fonksiyon bulunmadığı için sql patlar.

select stuff( (select',' + cast(t.CLIENTREF as varchar(max))
from LG_001_SLSCLREL t
for xml path ('')
), 1, 1, ''
);

Direkt olarak ilgili alanı gruplamak istediğinizde bu şekilde işlem yapabiliyorsunuz.

Fakat Satış temsilcisi bazında bu alanları gruplamak isterseniz, sorgu şekilinizi biraz daha değiştirmeniz gerekir.

SELECT MT.SALESMANREF,
STUFF((SELECT ',' + convert(nvarchar(max),sq.CLIENTREF)
FROM dbo.LG_001_SLSCLREL sq
WHERE sq.SALESMANREF = MT.SALESMANREF --This is your correlated join and should be on the same columns as your GROUP BY
--You "JOIN" on the columns that would have been in the PARTITION BY
FOR XML PATH(''),TYPE).value('(./text())[1]','varchar(MAX)'),1,1,'')
FROM dbo.LG_001_SLSCLREL MT
GROUP BY MT.SALESMANREF;

Umarım internetten araştırdığınızda bu yazıya denk gelirsiniz ve size faydalı olur.

İyi çalışmalar..

--

--