SQL Mükkerrer Satırları Yan Yana Getirme

SQL Mükkerrer Satırları Yan Yana Getirme

MS SQL de bazı durumlarda özellikle mükkerrer olan kayıtları aynı satırda yan yana getirme ihtiyacı olabilir. Genellikle veri günceleme yaparken güncellenecek satıra birden çok satır mükerrer veri geliyorsa güncelleme işlemi sonucu sadece bir satır bilgi güncellenir ve diğer veriler kayıp olur. Böyle durumlarda bütün verilerin yan yana getirilmesi veya biriktirilmesi gerekebilir. Bu soruna çözüm için MS SQL de en iyi yöntem Stuff ifadesi kullanarak mükerrer kayıtları tek satırda yan yana göstermek olacaktır. Ayrıca raporlama amaçlı olarak da bir grubu ait detayları virgül ile ayırarak yan yana getirilebilir.

Öncelikle örnek bir veri seti için geçici bir tablo oluşturalım.

SELECT 1 AS ID, 'ADANA' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE
INTO #TABLO
UNION
SELECT 1 AS ID, 'ANTALYA' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'BURDUR' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'HATAY' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'ISPARTA' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'KAHRAMANMARAŞ' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'MERSİN' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 1 AS ID, 'OSMANİYE' AS SEHIR,'AKDENİZ BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'AĞRI' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'ARDAHAN' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'BİNGÖL' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'BİTLİS' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'ELAZIĞ' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'ERZİNCAN' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'ERZURUM' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'HAKKARİ' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'IĞDIR' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'KARS' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'MALATYA' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'MUŞ' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'TUNCELİ' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 2 AS ID, 'VAN' AS SEHIR,'DOĞU ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'AFYON' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'AYDIN' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'DENİZLİ' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'İZMİR' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'KÜTAHYA' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'MANİSA' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'MUĞLA' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 3 AS ID, 'UŞAK' AS SEHIR,'EGE BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'ADIYAMAN' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'BATMAN' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'DİYARBAKIR' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'GAZİANTEP' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'KİLİS' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'MARDİN' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'SİİRT' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'ŞANLIURFA' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 4 AS ID, 'ŞIRNAK' AS SEHIR,'GÜNEYDOĞU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'AKSARAY' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'ANKARA' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'ÇANKIRI' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'ESKİŞEHİR' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'KARAMAN' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'KAYSERİ' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'KIRIKKALE' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'KIRŞEHİR' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'KONYA' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'NEVŞEHİR' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'NİĞDE' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'SİVAS' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 5 AS ID, 'YOZGAT' AS SEHIR,'İÇ ANADOLU BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'AMASYA' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'ARTVİN' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'BARTIN' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'BAYBURT' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'BOLU' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'ÇORUM' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'DÜZCE' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'GİRESUN' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'GÜMÜŞHANE' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'KARABÜK' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'KASTAMONU' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'ORDU' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'RİZE' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'SAMSUN' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'SİNOP' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'TOKAT' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'TRABZON' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 6 AS ID, 'ZONGULDAK' AS SEHIR,'KARADENİZ BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'BALIKESİR' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'BİLECİK' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'BURSA' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'ÇANAKKALE' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'EDİRNE' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'İSTANBUL' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'KIRKLARELİ' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'KOCAELİ' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'SAKARYA' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'TEKİRDAĞ' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE UNION
SELECT 7 AS ID, 'YALOVA' AS SEHIR,'MARMARA BÖLGESİ' AS BOLGE

Oluşturulan tablo aşağıdaki gibidir.
SELECT * FROM #TABLO 

ID SEHIR BOLGE
1 ADANA AKDENİZ BÖLGESİ
1 ANTALYA AKDENİZ BÖLGESİ
1 BURDUR AKDENİZ BÖLGESİ
1 HATAY AKDENİZ BÖLGESİ
1 ISPARTA AKDENİZ BÖLGESİ
1 KAHRAMANMARAŞ AKDENİZ BÖLGESİ
1 MERSİN AKDENİZ BÖLGESİ
1 OSMANİYE AKDENİZ BÖLGESİ
2 AĞRI DOĞU ANADOLU BÖLGESİ
2 ARDAHAN DOĞU ANADOLU BÖLGESİ
2 BİNGÖL DOĞU ANADOLU BÖLGESİ
2 BİTLİS DOĞU ANADOLU BÖLGESİ
2 ELAZIĞ DOĞU ANADOLU BÖLGESİ
2 ERZİNCAN DOĞU ANADOLU BÖLGESİ
2 ERZURUM DOĞU ANADOLU BÖLGESİ
2 HAKKARİ DOĞU ANADOLU BÖLGESİ
2 IĞDIR DOĞU ANADOLU BÖLGESİ
2 KARS DOĞU ANADOLU BÖLGESİ
2 MALATYA DOĞU ANADOLU BÖLGESİ
2 MUŞ DOĞU ANADOLU BÖLGESİ
2 TUNCELİ DOĞU ANADOLU BÖLGESİ
2 VAN DOĞU ANADOLU BÖLGESİ
3 AFYON EGE BÖLGESİ
3 AYDIN EGE BÖLGESİ
3 DENİZLİ EGE BÖLGESİ
3 İZMİR EGE BÖLGESİ
3 KÜTAHYA EGE BÖLGESİ
3 MANİSA EGE BÖLGESİ
3 MUĞLA EGE BÖLGESİ
3 UŞAK EGE BÖLGESİ
4 ADIYAMAN GÜNEYDOĞU BÖLGESİ
4 BATMAN GÜNEYDOĞU BÖLGESİ
4 DİYARBAKIR GÜNEYDOĞU BÖLGESİ
4 GAZİANTEP GÜNEYDOĞU BÖLGESİ
4 KİLİS GÜNEYDOĞU BÖLGESİ
4 MARDİN GÜNEYDOĞU BÖLGESİ
4 SİİRT GÜNEYDOĞU BÖLGESİ
4 ŞANLIURFA GÜNEYDOĞU BÖLGESİ
4 ŞIRNAK GÜNEYDOĞU BÖLGESİ
5 AKSARAY İÇ ANADOLU BÖLGESİ
5 ANKARA İÇ ANADOLU BÖLGESİ
5 ÇANKIRI İÇ ANADOLU BÖLGESİ
5 ESKİŞEHİR İÇ ANADOLU BÖLGESİ
5 KARAMAN İÇ ANADOLU BÖLGESİ
5 KAYSERİ İÇ ANADOLU BÖLGESİ
5 KIRIKKALE İÇ ANADOLU BÖLGESİ
5 KIRŞEHİR İÇ ANADOLU BÖLGESİ
5 KONYA İÇ ANADOLU BÖLGESİ
5 NEVŞEHİR İÇ ANADOLU BÖLGESİ
5 NİĞDE İÇ ANADOLU BÖLGESİ
5 SİVAS İÇ ANADOLU BÖLGESİ
5 YOZGAT İÇ ANADOLU BÖLGESİ
6 AMASYA KARADENİZ BÖLGESİ
6 ARTVİN KARADENİZ BÖLGESİ
6 BARTIN KARADENİZ BÖLGESİ
6 BAYBURT KARADENİZ BÖLGESİ
6 BOLU KARADENİZ BÖLGESİ
6 ÇORUM KARADENİZ BÖLGESİ
6 DÜZCE KARADENİZ BÖLGESİ
6 GİRESUN KARADENİZ BÖLGESİ
6 GÜMÜŞHANE KARADENİZ BÖLGESİ
6 KARABÜK KARADENİZ BÖLGESİ
6 KASTAMONU KARADENİZ BÖLGESİ
6 ORDU KARADENİZ BÖLGESİ
6 RİZE KARADENİZ BÖLGESİ
6 SAMSUN KARADENİZ BÖLGESİ
6 SİNOP KARADENİZ BÖLGESİ
6 TOKAT KARADENİZ BÖLGESİ
6 TRABZON KARADENİZ BÖLGESİ
6 ZONGULDAK KARADENİZ BÖLGESİ
7 BALIKESİR MARMARA BÖLGESİ
7 BİLECİK MARMARA BÖLGESİ
7 BURSA MARMARA BÖLGESİ
7 ÇANAKKALE MARMARA BÖLGESİ
7 EDİRNE MARMARA BÖLGESİ
7 İSTANBUL MARMARA BÖLGESİ
7 KIRKLARELİ MARMARA BÖLGESİ
7 KOCAELİ MARMARA BÖLGESİ
7 SAKARYA MARMARA BÖLGESİ
7 TEKİRDAĞ MARMARA BÖLGESİ
7 YALOVA MARMARA BÖLGESİ

Şehir alanında yana yana getiren T-SQL sorgusu:

SELECT A2.ID,A2.BOLGE,
STUFF( (SELECT '; ' + RTRIM(A1.SEHIR)
FROM #TABLO AS A1
WHERE A1.ID= A2.ID ORDER BY SEHIR FOR XML PATH('')), 1, 1, '' ) AS SEHIRLER
FROM #TABLO AS A2 GROUP BY A2.ID,A2.BOLGE
ORDER BY 1,2 

ID BOLGE SEHIRLER
1 AKDENİZ BÖLGESİ  ADANA; ANTALYA; BURDUR; HATAY; ISPARTA; KAHRAMANMARAŞ; MERSİN; OSMANİYE
2 DOĞU ANADOLU BÖLGESİ  AĞRI; ARDAHAN; BİNGÖL; BİTLİS; ELAZIĞ; ERZİNCAN; ERZURUM; HAKKARİ; IĞDIR; KARS; MALATYA; MUŞ; TUNCELİ; VAN
3 EGE BÖLGESİ  AFYON; AYDIN; DENİZLİ; İZMİR; KÜTAHYA; MANİSA; MUĞLA; UŞAK
4 GÜNEYDOĞU BÖLGESİ  ADIYAMAN; BATMAN; DİYARBAKIR; GAZİANTEP; KİLİS; MARDİN; SİİRT; ŞANLIURFA; ŞIRNAK
5 İÇ ANADOLU BÖLGESİ  AKSARAY; ANKARA; ÇANKIRI; ESKİŞEHİR; KARAMAN; KAYSERİ; KIRIKKALE; KIRŞEHİR; KONYA; NEVŞEHİR; NİĞDE; SİVAS; YOZGAT
6 KARADENİZ BÖLGESİ  AMASYA; ARTVİN; BARTIN; BAYBURT; BOLU; ÇORUM; DÜZCE; GİRESUN; GÜMÜŞHANE; KARABÜK; KASTAMONU; ORDU; RİZE; SAMSUN; SİNOP; TOKAT; TRABZON; ZONGULDAK
7 MARMARA BÖLGESİ  BALIKESİR; BİLECİK; BURSA; ÇANAKKALE; EDİRNE; İSTANBUL; KIRKLARELİ; KOCAELİ; SAKARYA; TEKİRDAĞ; YALOVA

 


İlgili Yazılar