MSSQL ile Özet sorgu sonucuna toplam satırı ekleme

MS Sql ile özet sorgularda gruplanan sonucun en alt satırına toplam alanı eklenmesi bazen istenebilir. Aslında bu konu sorgunun değil raporun işi olsa da bazen sorguya ekleme pratiklik sağlar.
Aşağıdaki gruplanan sorguya birde union ile sorgu ekleyip sorunu çözebiliriz.
Burada ZSonuç şeklinde sorguyu adlandırmamız nedeni alfabetik bir sıralama olacağından en alt satıra Toplam satırı gelmesi içindir.
Dikkat edilecek diğer nokta ise bu bir Union sorgusu olduğundan 1. sorgu sonucu alanı kadar 2. sorgu sonucu alanı olmalı ve alt alta gelen alanlar aynı türden veriler içermelidir.
Veri kaynağı için geçici tablo oluşturma
SELECT 1 AS ID,'AHMET1' AS ADI,'DENEME1' AS SOYADI,'İSTANBUL' AS SEHIR
INTO #GECICI_TABLO
UNION
SELECT 2 AS ID, 'AHMET2' AS ADI,'DENEME2' AS SOYADI,'ANKARA' AS SEHIR UNION
SELECT 3 AS ID, 'AHMET3' AS ADI,'DENEME3' AS SOYADI,'İSTANBUL' AS SEHIR UNION
SELECT 4 AS ID,'AHMET4' AS ADI,'DENEME4' AS SOYADI,'ANKARA' AS SEHIR UNION
SELECT 5 AS ID,'AHMET5' AS ADI,'DENEME5' AS SOYADI,'İZMİR' AS SEHIR UNION
SELECT 6 AS ID,'AHMET6' AS ADI,'DENEME6' AS SOYADI,'BURSA' AS SEHIR UNION
SELECT 7 AS ID,'AHMET7' AS ADI,'DENEME7' AS SOYADI,'İZMİR' AS SEHIR UNION
SELECT 8 AS ID,'AHMET8' AS ADI,'DENEME8' AS SOYADI,'İSTANBUL' AS SEHIR UNION
SELECT 9 AS ID,'AHMET9' AS ADI,'DENEME9' AS SOYADI,'İSTANBUL' AS SEHIR UNION
SELECT 10 AS ID,'AHMET10' AS ADI,'DENEME10' AS SOYADI,'İZMİR' AS SEHIR UNION
SELECT 11 AS ID,'AHMET11' AS ADI,'DENEME11' AS SOYADI,'ANKARA' AS SEHIR UNION
SELECT 12 AS ID,'AHMET12' AS ADI,'DENEME12' AS SOYADI,'BURSA' AS SEHIR UNION
SELECT 13 AS ID,'AHMET13' AS ADI,'DENEME13' AS SOYADI,'ADANA' AS SEHIR UNION
SELECT 14 AS ID,'AHMET14' AS ADI,'DENEME14' AS SOYADI,'ADANA' AS SEHIR UNION
SELECT 15 AS ID,'AHMET15' AS ADI,'DENEME15' AS SOYADI,'İSTANBUL' AS SEHIR
Oluşturduğumuz geçici tablomuzun içeriği aşağıdaki gibidir.
SELECT * FROM #GECICI_TABLO
ID | ADI | SOYADI | SEHIR |
1 | AHMET1 | DENEME1 | İSTANBUL |
2 | AHMET2 | DENEME2 | ANKARA |
3 | AHMET3 | DENEME3 | İSTANBUL |
4 | AHMET4 | DENEME4 | ANKARA |
5 | AHMET5 | DENEME5 | İZMİR |
6 | AHMET6 | DENEME6 | BURSA |
7 | AHMET7 | DENEME7 | İZMİR |
8 | AHMET8 | DENEME8 | İSTANBUL |
9 | AHMET9 | DENEME9 | İSTANBUL |
10 | AHMET10 | DENEME10 | İZMİR |
11 | AHMET11 | DENEME11 | ANKARA |
12 | AHMET12 | DENEME12 | BURSA |
13 | AHMET13 | DENEME13 | ADANA |
14 | AHMET14 | DENEME14 | ADANA |
15 | AHMET15 | DENEME15 | İSTANBUL |
Gruplama ve Toplam satırı ekleyen Sorgu
SELECT SEHIR,COUNT(ID) AS SAYI Sorgu
FROM #GECICI_TABLO
GROUP BY SEHIR
UNION
SELECT 'ZTOPLAM',COUNT(ID) AS SAYI
FROM #GECICI_TABLO
ORDER BY 1
Sonuç
SEHIR | SAYI |
ADANA | 2 |
ANKARA | 3 |
BURSA | 2 |
İSTANBUL | 5 |
İZMİR | 3 |
ZTOPLAM | 15 |