raporlama group by ve sum komutu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bigbrother
Üye
Mesajlar: 7
Kayıt: 19 Ara 2014 03:07

raporlama group by ve sum komutu

Mesaj gönderen bigbrother »

procedure TForm8.Button2Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT islem_Yili, SUM(Muracaatci="AİLE")AS EVDEN, SUM(Muracaatci="YURT") AS YURTTAN, count(Muracaatci) as TOPLAM FROM KayiplikBilgisi GROUP BY islem_Yili';
ADOQuery1.Open;
end;

islem_Yili * AİLE * YURT * TOPLAM
2011 * -1 * 0 * 1
2012 * 0 * -4 * 4
2013 * -3 * -4 * 7
2014 * 0 * -5 * 5

programı çalıştırdığımda SUM ile aldığım toplamlar dbgrid'de negetif sayı çıkıyor. pozitif sayı olmamasının nedenini bulamadım yardım ederseniz sevinirim. teşekkürler.
bigbrother
Üye
Mesajlar: 7
Kayıt: 19 Ara 2014 03:07

Re: raporlama group by ve sum komutu

Mesaj gönderen bigbrother »

metin tanımlı içeriği sayı tanımlı gibi toplatmaya çalışıyorum farkındayım ancak tek sütundaki kayıt sayısını COUNT la alınca tüm toplamı veriyor. SUM yerine COUNT yazdığımda her sütun genel toplamı veriyor. COUNT la istediğim sonucu alamadı (ben yapamadım) veri tabanında tek sütundaki veriyi iki sütuna ayırınca COUNT la oluyor. veri tabanında sütun ([Muracaatci] sütunu yerine [AİLE] [YURT]) eklemeden nasıl yapabilirim. öğrenmek istediğim bu.
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: raporlama group by ve sum komutu

Mesaj gönderen unicorn64 »

veritabanınızın ne olduğunu yazmamışsınız ama

Kod: Tümünü seç

SELECT T1.islem_Yili,T1.EVDEN,T2.YURTTAN,T3.TOPLAM
FROM
  (SELECT islem_Yili,COUNT(*) EVDEN FROM KayiplikBilgisi  WHERE Muracaatci='AİLE' GROUP BY islem_Yili) T1,
  (SELECT islem_Yili,COUNT(*) YURTTAN FROM KayiplikBilgisi  WHERE Muracaatci='YURT' GROUP BY islem_Yili) T2,
  (SELECT COUNT(*) TOPLAM FROM KayiplikBilgisi) T3
WHERE T1.islem_Yili=T2.islem_Yili AND T1.islem_Yili=T3.islem_Yili
şeklinde denermisiniz
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
bigbrother
Üye
Mesajlar: 7
Kayıt: 19 Ara 2014 03:07

Re: raporlama group by ve sum komutu

Mesaj gönderen bigbrother »

kodu denedim; 'COUNT(*) EVDEN' söz dizimi hatası (eksik imleç) hatası verdi. ???

veri tabanım Access. "KayiplikBilgisi" tablonun adı.

[islem_tarihi] ve [Muracaatci] tablomdaki sütun başlıklarıdır. (AİLE) ve (YURT) Muracaatci sütunundaki veridir.

TEŞEKKÜRLER.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: raporlama group by ve sum komutu

Mesaj gönderen tayipk »

merhaba kodlarını aşağıdaki şekilde kendine göre uyarlayıp deneyebilirmisin test ettim çalışıyor

Kod: Tümünü seç

select( select COUNT(IdUreticiFirma) from Urun where IdUrunGrup='1' )as firma,(select COUNT(IdKamuEsdegerKodu) from Urun where IdKamuEsdegerKodu='604') as esdeger,(select count(IdUrunGrup) ) as urungrup from Urun where IdUreticiFirma='811' 
Resim
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
bigbrother
Üye
Mesajlar: 7
Kayıt: 19 Ara 2014 03:07

Re: raporlama group by ve sum komutu

Mesaj gönderen bigbrother »

verdiğiniz kodu uyarlamaya çalıştım ancak 'BelirtilmemişHata' verdi.

procedure TForm8.Button3Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT islem_Yili, count(Muracaatci)as EVDEN FROM KayiplikBilgisi where Muracaatci="AİLE" GROUP BY islem_Yili';
ADOQuery1.Open;
end;


sql.text satırımı 'SELECT islem_Yili, count(Muracaatci)as EVDEN FROM KayiplikBilgisi where Muracaatci="AİLE" GROUP BY islem_Yili'; şeklinde yazdığımda [Muracaatci] sütunundaki (AİLE) toplam sayısı dökümünü yerine 'SELECT islem_Yili, count(Muracaatci)as YURTTAN FROM KayiplikBilgisi where Muracaatci="YURT" GROUP BY islem_Yili'; yazdığımda da (YURT) toplam sayısı dökümünü aldım. bu iki sql satırını birleştirince Belirtilmemiş hata diyor.

dbgrid tablosunda aynı anda her iki dökümü alabilmem için sql satırını çalışır vaziyette nasıl birleştirebilirim...
teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: raporlama group by ve sum komutu

Mesaj gönderen mrmarman »

MSAccess veritabanı için basit bir IIF() fonksiyonu işinizi görecektir.

Kod: Tümünü seç

SELECT islem_Yili, SUM( IIF(Muracaatci="AİLE",1,0)) AS EVDEN, SUM( IIF( Muracaatci="YURT", 1, 0)) AS YURTTAN FROM KayiplikBilgisi


- İşlevi : IIF( eşitlik, doğru ise sonuç, yanlış ise sonuç ) şeklinde çalışır. Bunu SUM bloğuna alınca da 1'leri veya 0'ları toplama işlemine alır.
Resim
Resim ....Resim
bigbrother
Üye
Mesajlar: 7
Kayıt: 19 Ara 2014 03:07

Re: raporlama group by ve sum komutu

Mesaj gönderen bigbrother »

TEŞEKKÜR EDERİM. istediğim tam da buydu.

kodun yeni hali;

procedure TForm8.Button3Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:='SELECT islem_Yili, SUM( IIF(Muracaatci="AİLE",1,0)) AS EVDEN, SUM( IIF( Muracaatci="YURT", 1, 0)) AS YURTTAN, count(Muracaatci) as TOPLAM FROM KayiplikBilgisi GROUP BY islem_Yili';
ADOQuery1.Open;
end;
opordace
Üye
Mesajlar: 15
Kayıt: 28 Nis 2015 02:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace »

ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.SQL.Add('Select UrunAD,UrunID,SUM(UrunToplam) from vw_ext_SipSatis_Gecmis Where SipSubeID=1 GROUP BY UrunID');
ADOQuery1.open;

Group By clause diye bir hata veriyor. Bu sorgudaki hata nedir acaba ?
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten »

GroupBy yapılan kolon ya da kolonlardan başka diğer alanlar aggregate fonksiyon olmadan (min, max, sum gibi) kullanılamaz. Siz burada UrunAD adlı alan adını kullanmışsınız. Hatayı o nedenle veriyordur. Urun adını da Group By'da verirseniz sorun çıkarmayacaktır.
yani şunun gibi
select UrunID, UrunAD, sum(UrunToplam) from vw_ext_SipSatis_Gecmis Where SipSubeID=1 GROUP BY UrunID, UrunAD
opordace
Üye
Mesajlar: 15
Kayıt: 28 Nis 2015 02:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace »

Bu şekilde yaptım, şimdi de UrunToplam not found gibi bir hata verdi, sum komutunu kaldırınca sorun yok. Aslında yapmak istediğim şu;

Bu tabloda aynı UrunID olan kayıtlardaki UrunToplam alanındaki değerleri toplayıp tek bir kayıt olarak göstermek. Gösterirkende UrunID UrunToplam şeklinde değilde UrunAD UrunToplam şeklinde göstermek istiyorum.
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten »

UrunID alanını UrunAD alanı ayrı ayrı mevcut değil mi?
Eğer sadece UrunID alanı varsa ve bunu UrunAD olarak adlandıracaksan şu şekilde yapılabilir;

select UrunID as UrunAD, sum(UrunToplam) as ToplamMiktar from vw_ext_SipSatis_Gecmis Where SipSubeID=1 GROUP BY UrunID
opordace
Üye
Mesajlar: 15
Kayıt: 28 Nis 2015 02:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace »

Ayrı 2 alan.... aşağıdaki sorguyu yaptım

ADOQuery1.Close;
ADOQuery1.sql.clear;
ADOQuery1.SQL.Add('Select UrunID,SUM(UrunToplam) from vw_ext_Sipsatis_Gecmis Where UrunID=382 GROUP BY UrunID');
ADOQuery1.open;
// UrunID si 382 olan kayıtların UrunToplam alanındaki değerleri topladı ve tek kayıt haline getirdi. Sorunum çözüldü. Fakat;

edit1.text:=ADOQuery1.FieldByName('UrunAD').Value; //Tablo da UrunAD diye alan var o değeri edit'e yazmak istediğimde UrunAD not found diyor.

ADOQuery1.SQL.Add('Select UrunID,UrunAD,SUM(UrunToplam) from vw_ext_Sipsatis_Gecmis Where UrunID=382 GROUP BY UrunID,UrunAD');
// Bu şekilde yapınca tam istediğim oluyor ama bu seferde sorgu uzun sürüyor, diğer konuyada yazdım sorgu hızıyla ilgili ama bir sonuç alamadım. Yani sorguda UrunAD alanını kullanmayıp sorgu yapınca, çıkan sorgu sonucundan UrunAD alanından bir değer okuyamıyorum, bunun bir yolu var mı?
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten »

Anladığım şekliyle fikir beyan ediyorum;
Veritabanı tasarımında sorun var gibi görünüyor. Siz detay tablosunu sorguluyorsunuz ama bunun içinde master tabloda olması gereken ürün adı bilgisi mevcut. Ya da bunu View'den alıyorsunuz, belki de View'de iki tablo Join yapılıyor.
Bence View'den değil de kendiniz doğrudan tabloları kullanarak bu işlemi yaparsanız sorunun çözümünü daha çabuk bulursunuz. Belki de view'de sorun vardır.
opordace
Üye
Mesajlar: 15
Kayıt: 28 Nis 2015 02:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace »

Evet View den alıyorum, Veritabanı bana ait değil, kullanılan bir programdan veri çekiyorum ve View kullanmam gerekiyor. Yazdıklarınız aslında beni bayağı çözüme yaklaştırdı, çok teşekkür ederim.
Cevapla