Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Sql en çok satılan [Çözüldü]
#1
Selam.

Sql de en çok satılan ürünü bulmak istiyorum, URUNKODU alanım olmasına rağmen 'URUNKODU' not found hatası alıyorum  bunun sebebi  ne olabilir?



      
      SQL.Add('Select Max(ADET) As ADET From SATILAN');
      SQL.Add('Where TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC');
      ParamByName('TRH1').AsDate := StartTarih.Date;
      ParamByName('TRH2').AsDate := EndTarih.Date;



     while Not Eof do
          begin
            Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;
Cevapla
#2
while Not Eof do
         begin
           Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;


Burada hata veriyordur O zaman Yukarıdaki Sorguda zaten Öyle bir durum yok.

En Çok Satan ürünü Almak istiyorsanız da

[Ars=sql]Select TOP 1 sum(adet) as adet from SATILAN  GROUP BY URUNKODU ORDER BY SATILAN DESC[/ars]

Böyle daha iyi Olur gibi.
Cevapla
#3
(03-07-2017, Saat: 20:44)dilo Adlı Kullanıcıdan Alıntı: Selam.

Sql de en çok satılan ürünü bulmak istiyorum, URUNKODU alanım olmasına rağmen 'URUNKODU' not found hatası alıyorum  bunun sebebi  ne olabilir?



      
      SQL.Add('Select Max(ADET) As ADET From SATILAN');
      SQL.Add('Where TARIH BETWEEN :TRH1 And :TRH2 Order By TARIH ASC');
      ParamByName('TRH1').AsDate := StartTarih.Date;
      ParamByName('TRH2').AsDate := EndTarih.Date;

     while Not Eof do
          begin
            Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;

FieldByName ile okutmaya çalıştığın alanı SELECT cümlesine eklememişsin, ORDER BY Tarih kısmına gerek yok, sana WHERE kısmında tarih olmasy yeter, SQL sorgusunu şöyle yazarsan sonuç alırsın;

      
      SQL.Add('Select URUNKODU, Max(ADET) As ADET From SATILAN ');
      SQL.Add('Where TARIH BETWEEN :TRH1 And :TRH2  GROUP BY URUNKODU ORDER BY Adet DESC ');
      ParamByName('TRH1').AsDate := StartTarih.Date;
      ParamByName('TRH2').AsDate := EndTarih.Date;

     while Not Eof do
          begin
            Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#4
Kodları kendime uyarladım, Fakat bir türlü ürünlerin toplamını alamadım saçma sapan sonuçlar çıkıyor.

Örnek:
Motosiklet 32 toplam adet var
Modem 22 toplam  adet var fakat  

Motosiklet 7 adet çıkıyor
Modem 13 adet gibi saçma sapan çıkıyor.

      
   SQL.Add('Select URUNKODU, URUN, MODEL, ADET, Max(ADET) As ADET From SATILAN');
     SQL.Add('Where TARIH Between :TRH1 And :TRH2 Group By URUNKODU Order By ADET Desc');
     ParamByName('TRH1').AsDate := StartTarih.Date;
     ParamByName('TRH2').AsDate := EndTarih.Date;



          
       while Not Eof do
         begin
           AdetSay := AdetSay + FieldByName('ADET').AsInteger;
           Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;
           Sheet.Cells[Row, 2] := FieldByName('URUN').AsString;
           Sheet.Cells[Row, 3] := FieldByName('MODEL').AsString;
           Sheet.Cells[Row, 4] := AdetSay;
           Inc(Row);
           Next;
         end;
Cevapla
#5
(04-07-2017, Saat: 04:53)dilo Adlı Kullanıcıdan Alıntı: Kodları kendime uyarladım, Fakat bir türlü ürünlerin toplamını alamadım saçma sapan sonuçlar çıkıyor.

Örnek:
Motosiklet 32 toplam adet var
Modem 22 toplam  adet var fakat  

Motosiklet 7 adet çıkıyor
Modem 13 adet gibi saçma sapan çıkıyor.

      
   SQL.Add('Select URUNKODU, URUN, MODEL, ADET, Max(ADET) As ADET From SATILAN');
     SQL.Add('Where TARIH Between :TRH1 And :TRH2 Group By URUNKODU Order By ADET Desc');
     ParamByName('TRH1').AsDate := StartTarih.Date;
     ParamByName('TRH2').AsDate := EndTarih.Date;



          
       while Not Eof do
         begin
           AdetSay := AdetSay + FieldByName('ADET').AsInteger;
           Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;
           Sheet.Cells[Row, 2] := FieldByName('URUN').AsString;
           Sheet.Cells[Row, 3] := FieldByName('MODEL').AsString;
           Sheet.Cells[Row, 4] := AdetSay;
           Inc(Row);
           Next;
         end;

Where kısmındaki tarih aralığını kaldırdığında istediğin sonuçları elde edebiliyor musun...
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#6
Merhabalar ,
max(adet) değilde sum(adet) olarak düzeltmeniz gerekir.
Cevapla
#7
(04-07-2017, Saat: 09:01)vkamadan Adlı Kullanıcıdan Alıntı: Merhabalar ,
max(adet) değilde sum(adet) olarak düzeltmeniz gerekir.

+1
Sum ilgili field'ın toplamını verir.
Max ilgili field'daki en büyük olanı verir.
WWW
Cevapla
#8
(04-07-2017, Saat: 09:06)yhackup Adlı Kullanıcıdan Alıntı:
(04-07-2017, Saat: 09:01)vkamadan Adlı Kullanıcıdan Alıntı: Merhabalar ,
max(adet)    değilde sum(adet)  olarak düzeltmeniz gerekir.

+1
Sum ilgili field'ın toplamını verir.
Max ilgili field'daki en büyük olanı verir.


Artı (+) Puanlar için

2017-07-04_09-34-56.png
Delphi Can'dır!
WWW
Cevapla
#9
Merhaba,
Arkadaşların dediği gibi SUM toplam alır, MAX en büyük işlemi gösterir, ayrıca;
      
   SQL.Add('Select URUNKODU, URUN, MODEL, ADET, Max(ADET) As ADET From SATILAN');
     SQL.Add('Where TARIH Between :TRH1 And :TRH2 Group By URUNKODU Order By ADET Desc');
     ParamByName('TRH1').AsDate := StartTarih.Date;
     ParamByName('TRH2').AsDate := EndTarih.Date;
yukarıdaki kullanım çalışmayacaktır. SUM, AVG, MAX, MIN gibi kullanımlarda GROUP BY önüne gelen bütün alanlara uygulanmalıdır. yani sizdeki kullanımda ; 
      
   SQL.Add('Select URUNKODU, URUN, MODEL, SUM(ADET) As ADET From SATILAN');
     SQL.Add('Where TARIH Between :TRH1 And :TRH2 Group By URUNKODU, URUN, MODEL Order By ADET Desc');
     ParamByName('TRH1').AsDate := StartTarih.Date;
     ParamByName('TRH2').AsDate := EndTarih.Date;
şeklinde olmalıdır.
WWW
Cevapla
#10
(04-07-2017, Saat: 11:23)esistem Adlı Kullanıcıdan Alıntı:
      
  SQL.Add('Select URUNKODU, URUN, MODEL, SUM(ADET) As ADET From SATILAN');
      SQL.Add('Where TARIH Between :TRH1 And :TRH2 Group By URUNKODU, URUN, MODEL Order By ADET Desc');
     ParamByName('TRH1').AsDate := StartTarih.Date;
     ParamByName('TRH2').AsDate := EndTarih.Date;

          
while Not Eof do
          begin
            AdetSay := AdetSay + FieldByName('ADET').AsInteger;
            Sheet.Cells[Row, 1] := FieldByName('URUNKODU').AsString;
            Sheet.Cells[Row, 2] := FieldByName('URUN').AsString;
            Sheet.Cells[Row, 3] := FieldByName('MODEL').AsString;
            Sheet.Cells[Row, 4] := AdetSay;
            Inc(Row);
            Next;
          end;



Emeği geçe herkese teşekkür ederim, fakat doğru toplamları alamıyorum.

nWjp6V.jpg
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  En çok satılan miktarı bulmak. OZCANK 3 403 08-02-2025, Saat: 16:35
Son Yorum: Hayati
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 393 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  paslibvlcplayerin gec acilmasi sorunu-COZULDU sadikacar60 7 518 08-10-2024, Saat: 09:25
Son Yorum: mrmarman
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 4 6.287 08-10-2024, Saat: 09:20
Son Yorum: sadikacar60
  çözüldü-screenshot yapmak hk. sadikacar60 16 7.452 19-06-2024, Saat: 16:12
Son Yorum: bydelphi



Konuyu Okuyanlar: 1 Ziyaretçi