Merhabalar,
SQL içinde bazı verileri birleştirmemiz (concatenate) gerekebilir. MSSQL de bulunan bir işlem bunun için biçilmiş kaftandır.
Örn: Bir tabloda bir kullanıcıya ait birden fazla e-posta adresi bulunabilir. Bu e-postaları “UserID” bazında gruplayarak e-posta adreslerini bir karakter ile birleştirmek istenilebilir.
2 – kaan1@test.com; kaan2@test.com
Bu sorgu ile aynı kullanıcıya ait e-postaları “; “ karakteri ile birleştirebiliriz.
DECLARE @EMailAdress TABLE ( ID INT, UserID INT, EMail nvarchar(50) ) INSERT INTO @EMailAdress VALUES (1, 12, 'test_01@test.com'), (2, 13, 'test_02@test.com'), (3, 13, 'test_03@test.com'), (4, 14, 'test_04@test.com'), (5, 15, 'test_05@test.com'), (6, 16, 'test_06@test.com') SELECT EMA1.UserID, STUFF((SELECT '; ' + EMA2.EMail FROM @EMailAdress AS EMA2 WHERE EMA1.UserID = EMA2.UserID FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '' ) AS EMail FROM @EMailAdress AS EMA1 GROUP BY EMA1.UserID
Aynı yöntemin farklı bir şekilde kullanımı;
DECLARE @EMailAdress TABLE ( ID INT, UserID INT, EMail nvarchar(50) ) INSERT INTO @EMailAdress SELECT 1, 12, 'test_01@test.com' UNION SELECT 2, 13, 'test_02@test.com' UNION SELECT 3, 13, 'test_03@test.com' UNION SELECT 4, 14, 'test_04@test.com' UNION SELECT 5, 15, 'test_05@test.com' UNION SELECT 6, 16, 'test_06@test.com'; WITH TT AS ( SELECT UserID FROM @EMailAdress GROUP BY UserID ) SELECT TT.UserID, STUFF((SELECT '; ' + EMail FROM @EMailAdress WHERE UserID = TT.UserID FOR XML PATH('')), 1, 1, '' ) AS EMail FROM TT;
// Sonuçlar: ParentID EMail 12 test_01@test.com 13 test_02@test.com; test_03@test.com 14 test_04@test.com 15 test_05@test.com 16 test_06@test.com