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 » 19 Ara 2014 01:30

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 » 19 Ara 2014 02:59

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 07:56
Konum: yine yeniden Ankara ^_^

Re: raporlama group by ve sum komutu

Mesaj gönderen unicorn64 » 19 Ara 2014 03:34

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 » 19 Ara 2014 08:33

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: 274
Kayıt: 27 Kas 2013 11:32

Re: raporlama group by ve sum komutu

Mesaj gönderen tayipk » 19 Ara 2014 08:59

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 » 21 Ara 2014 03:03

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: 4717
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: raporlama group by ve sum komutu

Mesaj gönderen mrmarman » 21 Ara 2014 03:16

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

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

Re: raporlama group by ve sum komutu

Mesaj gönderen bigbrother » 21 Ara 2014 10:57

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 01:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace » 05 Şub 2018 04:45

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 12:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten » 06 Şub 2018 12:30

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 01:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace » 06 Şub 2018 09:27

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 12:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten » 06 Şub 2018 12:20

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 01:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace » 06 Şub 2018 12:43

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 12:31

Re: raporlama group by ve sum komutu

Mesaj gönderen kerpeten » 06 Şub 2018 02:24

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 01:44

Re: raporlama group by ve sum komutu

Mesaj gönderen opordace » 06 Şub 2018 02:48

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