Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

SQL With Rollup Kullanımı

Merhabalar bu yazımda bir projemde araç istatistiklerini gösteren bir sql sorgusu yazmıştım bunu ne amaçla ve nasıl yaptığımı anlatmak istiyorum. _HAREKET isimli tablomdan araçla ilgili yapmış olduğu KM , yaptığı ciro , kaç sefer yaptığı ve bunların aylık toplamları gibi bilgilerden bir rapor oluşturmam gerekliydi.Bu raporu oluşturabilmem için öncelikle Araçlara göre gruplamam gerekliydi çünkü her satırda tek aracın bilgileri olmalıydı. Bu yüzden öncelikle GROUP BY kullanmaya karar verdim. Daha sonra da bu prosedüre ay ve yıl bilgisini dışardan göndererek filtreleme yaptırdım. Son olarak kilit nokta bu sorgudaki alt toplamı aldırmaktı.İşte bunu Sql’de yapan komut WITH ROLLUP komutu idi.

Bu komut group by sonuna yazıldığı zaman grup bazında alınan toplamların en üstte bütün grupların toplamını aldırmakta.

Sorgumuz şu şekilde

declare @ay int,@yil int

SELECT @ay=10,@yil=2008

 

SELECT A.AracNo,MAX(A.PlakaNo) As PlakaNo,isnull(SUM(H.SCikan),0) As Toplam_Sevk,

isnull(SUM(H.CBorc),0) As Ciro,COUNT(H.SCikan) As Sefer_Sayisi,

(SELECT isnull(SUM(AH2.AGider),0) FROM _ARACHAREKET AH2

Left Join _HAREKET H On AH2.HareketNo=H.HareketNo

WHERE MONTH(H.Tarih)=@ay AND YEAR(H.Tarih)=@yil AND AH2.AracNo=A.AracNo) AS Arac_Gideri,

(SELECT ROUND(isnull(AVG(AH2.KMde_Yaktigi),0),2) FROM rArac_Hareketleri AH2

 WHERE AH2.AracNo=A.AracNo AND MONTH(AH2.Tarih)=@ay AND YEAR(AH2.Tarih)=@yil ) As KM_OrtalamaYakit

 FROM _ARACHAREKET AH 

Left Join _HAREKET H On AH.HareketNo=H.HareketNo Left Join _ARAC A On A.AracNo=AH.AracNo

WHERE   MONTH(Tarih)=@ay AND YEAR(Tarih)=@yil

GROUP BY A.AracNo

WITH ROLLUP

April 15, 2009 - Posted by | MSSql | , , , , , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s