Veri sorgulama sırasında bazı durumlarda GROUP BY fonksiyonu ile belli alanlara göre gruplamak gerekebilir.
Şöyle bir sorum var:
Burada dikkat edilecek bir konu group by ifadesinin sorguda her zaman where satırından sonra geldiğinin unutulmamasıdır.
Bir başka önemli konu da gruplama yapıldığı zaman gruplama yapılan değişken dışındaki tüm veriler kaybolur. Onun için gruplama yaparken kurguya çok dikkat etmek gerekir. Aksi takdirde analiz ettiğimiz veri istediğimiz veri olmayacaktır ve bizi yanlış yönlendirecektir.
select
stok.code as URUN_KODU,
miktarbirim.code as MIKTAR_BIRIM,
count(stok.reference) as URUN_SAYISI,
grup.code as GRUBU,
case stok.trackType
when 0 then 'Stok'
when 1 then 'Lot'
when 2 then 'Seri' else '?' end as IZLEME_YONTEMI,
stok.priceDefault as VARSAYILAN_SATIS_FIYATI
from StockItem stok
left join stok.baseUnit miktarbirim
left join stok.group grup
where stok.entity.reference = :entity_reference
group by miktarbirim.code
Burada görüldüğü gibi gruplama Miktar Birime göre yapılmıştır. Ürünler Miktar Birime göre gruplandığı zaman mantıklı olan sütunlar Miktar Birim sütunu ve Ürün Sayısı sütunudur. Bunun dışındaki veriler her ne kadar görünse de gruplama içinde hangi ürüne ait olduğu bilinemez.
Bunun yerine Satış Fatura Satırlarını, Ürünlere göre gruplarsak daha mantıklı bir iş yapmış oluruz. Bunun için;
select
urun.reference as URUN_KAYIT_NO,
urun.code as URUN_KODU,
urun.description as URUN_ACIKLAMA,
sum(satir.quantityBase) as TOPLAM_ADET,
sum (satir.netAmount * fatura.txCurr.txRate) as CIRO_TL,
sum (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate) as NET_TUTAR_TL,
sum ((satir.netAmount - (kdv.vatNet + satir.taxAmount)) *fatura.txCurr.txRate / fatura.rxRate) as NET_TUTAR_RD,
min (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate / satir.quantityBase ) as MIN_FIYAT,
max (((satir.netAmount - (kdv.vatNet + satir.taxAmount)))*fatura.txCurr.txRate / satir.quantityBase ) as MAX_FIYAT
from InvoiceLine satir
inner join satir.voucher as fatura
inner join satir.vat as kdv
inner join satir.itemStock as urun
where satir.reference > 0
and fatura.period.reference = :period_reference
and satir.lineType = 2
group by urun.reference
Burada da Satış Fatura Satırları Ürünlere göre gruplanmıştır. Ürün dışındaki diğer veriler kaybolduğu için sadece sütunlarda ürüne ait Kayıt No, Kod ve Açıklama bilgilerine yer verilmiştir. Bunun dışında satırlarda olan diğer veriler için ise işlemler yapılmış ve ürünlere ait;