Group By Kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Group By Kullanımı

Mesaj gönderen ozcank »

Arkadaşlar Merhaba, Satırları çarptırıp tek kaleme düşürmek istiyorum;

Bu şekilde;
Mustedi_Kodu - Belge_No - Fatura_No - Unvan - Brut_Toplam
001 00000001 00000001 IPA MARKET 148.14
001 00000001 00000001 IPA MARKET 158.40
001 00000001 00000001 IPA MARKET 77.10
Yapmak İstediğim;
001 00000001 00000001 IPA MARKET 383.64

Bu şekilde Group By da "Miktar,Urun_Bedeli" olmazsa sonuç verecek tek satır da "Brut_Toplam" toplayacak fakat bir türlü olmadı. Rica etsem bana yardımcı olabilir misiniz? Başka bir yolu veya alternatifi olabilir mi?

Kod: Tümünü seç

SELECT Musteri_Kodu,Belge_No,Fatura_No,Unvan,
convert(varchar,Fatura_No,5)+' '+convert(varchar,Fatura_No,8),
SUM(cast(REPLACE(Miktar,',', '.' ) as float ) * cast(ltrim(replace(Urun_Bedeli,',','.')) as float)) as Brut_Toplam
FROM TBLEMANETAKTAR 
WHERE Musteri_Kodu IS NOT NULL AND Belge_No='GRE2022000000177'
GROUP BY Musteri_Kodu,Belge_No,Fatura_No,Unvan,Miktar,Urun_Bedeli
bu şekilde de denedim;

Kod: Tümünü seç

SELECT t2.Musteri_Kodu,
         t2.Belge_No,
  (SELECT SUM(cast(ltrim(replace(Miktar,',','.')) as float) * cast(ltrim(replace(Urun_Bedeli,',','.')) as float))
  FROM TBLEMANETAKTAR t1  
  group By t1.Miktar,t1.Urun_Bedeli
  ) AS Brut_Toplam
   FROM TBLEMANETAKTAR t2 
WHERE t2.Musteri_Kodu IS NOT NULL AND t2.Belge_No='GRE2022000000177'
bu hatayı alıyorum.
Msg 8114, Level 16, State 5, Line 1

Error converting data type varchar to float.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Group By Kullanımı

Mesaj gönderen freeman35 »

server üzerine gereksiz işlem yüklemişsin. Convert ve sayısal alanlarda string işlemleri. Bunlar sql içinde manasız ve son derece gereksiz. Bu format işlemleri son kullanıcının okumasını kolaylaştırmak için.
Basit mantık. "Seri no" bir field ve varchar (boyu ne kadar istenirse, 3-5 gibi daha fazlası manasız) "Sıra no" bir field ve integer gerekirse Int64 olabilir. Bunlara index tanımlamakta gerekir ki performans yüksek olsun. Bu alanlarda işlem yani where group vs daha kolaydır. En son kullanıcıya gösterilecek kısımda formatla delphi tarafında yada çok gerekirse de select içerinsinde ki bu db serverda işlenip ordan gelecektir. yani db server a ve network trafiğine gereksiz yük.
SUM(cast(ltrim(replace(Miktar,',','.')) as float) bu zaten hiç bir mana veremedim !!!

Ayrıca sorun sql ile ilgil, forumdaki ilgili kısma soruyu sorman daha yerinde olurdu. Firebird mü ms yada my sql mi?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Group By Kullanımı

Mesaj gönderen ozcank »

Teşekkür ederim. Değerli bilgilerin için.
MSSQL 2014 Kullanıyorum. Bu soru için nasıl bir cümle yazabilirim peki yardımcı olabilir misin ?
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Group By Kullanımı

Mesaj gönderen loaded »

Kod: Tümünü seç

SELECT 
deneme."Musteri_Kodu",
deneme."Belge_No",
deneme."Fatura_No",
deneme."Unvan",
SUM(deneme."Brut_Toplam")
FROM deneme
GROUP BY 
deneme."Musteri_Kodu",
deneme."Belge_No",
deneme."Fatura_No",
deneme."Unvan"
1 1 1 "IPA MARKET" 383.64
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
ozcank
Üye
Mesajlar: 925
Kayıt: 28 Nis 2005 05:29

Re: Group By Kullanımı

Mesaj gönderen ozcank »

Arkadaşlar ,Merhaba şöyle bir şey yakaladım,

1.166,40 "Error converting data type varchar to float." hatası veriyor.

126,00 "Bu şekilde olanlar düzgün çalışıyor.

Bura da yapmam gereken bir değişiklik var mı?

Kod: Tümünü seç

	 SELECT Bt.Musteri_Kodu,Bt.Belge_No,Bt.Unvan,Sum(cast(ltrim(replace(Miktar,',','.')) as float) * cast(ltrim(replace(Urun_Bedeli,',','.')) as float)) as Brut_Toplam FROM TBLEMANETAKTAR bt WHERE Belge_No='AV22022000000808'
Group by Bt.Musteri_Kodu,Bt.Belge_No,Bt.Unvan
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Group By Kullanımı

Mesaj gönderen loaded »

Muhtemelen, Float veriyi string olarak sakladığınız için sorun yaşıyorsunuz.
Öncelikle noktayı yok etmelisiniz ardından virgülden noktaya dönüşüm yapmalısınız.
Lazarusta Denenmiş Kod ;

Kod: Tümünü seç

  Application.UpdateFormatSettings := false;
  DecimalSeparator := '.';
  showmessage(floattostr(StrToFloat(replacestr(ReplaceStr('1.166,40','.',''),',','.'))));
Sizde de böyle birşey olmalı ;

Kod: Tümünü seç

replace(replace(Miktar,'.',''),',','.')
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Cevapla