raporlama group by ve sum komutu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 7
- Kayıt: 19 Ara 2014 03:07
raporlama group by ve sum komutu
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.
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.
-
- Üye
- Mesajlar: 7
- Kayıt: 19 Ara 2014 03:07
Re: raporlama group by ve sum komutu
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.
Re: raporlama group by ve sum komutu
veritabanınızın ne olduğunu yazmamışsınız ama
şeklinde denermisiniz
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
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...

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...

-
- Üye
- Mesajlar: 7
- Kayıt: 19 Ara 2014 03:07
Re: raporlama group by ve sum komutu
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.
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.
Re: raporlama group by ve sum komutu
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'

Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
-
- Üye
- Mesajlar: 7
- Kayıt: 19 Ara 2014 03:07
Re: raporlama group by ve sum komutu
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.
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.
Re: raporlama group by ve sum komutu
MSAccess veritabanı için basit bir IIF() fonksiyonu işinizi görecektir.
- İş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.
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.
-
- Üye
- Mesajlar: 7
- Kayıt: 19 Ara 2014 03:07
Re: raporlama group by ve sum komutu
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;
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;
Re: raporlama group by ve sum komutu
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 ?
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 ?
Re: raporlama group by ve sum komutu
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
yani şunun gibi
select UrunID, UrunAD, sum(UrunToplam) from vw_ext_SipSatis_Gecmis Where SipSubeID=1 GROUP BY UrunID, UrunAD
Re: raporlama group by ve sum komutu
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.
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.
Re: raporlama group by ve sum komutu
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
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
Re: raporlama group by ve sum komutu
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ı?
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ı?
Re: raporlama group by ve sum komutu
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.
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.
Re: raporlama group by ve sum komutu
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.