Ay Function Kullanmadan Aylık Satış Hesap Mantığı

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Ay Function Kullanmadan Aylık Satış Hesap Mantığı

Mesaj gönderen pro_imaj »

Merhaba,

Tarih fonction kullanmadan demek istediğim vtye tarih sayı olarak kaydediliyor (38353 =01/01/2005 eşit yani tarihi sayıya çevirerek kaydediyorlar)

Benden aylık Satış raporu istiyorlar Müşteri bazında.

Bende

Kod: Tümünü seç

SELECT STI.KynkEvrakTip, STI.IslemTur, STI.IslemTip, STK.TipKod, STI.Chk, Sum(STI.Tutar) AS 'Toplam/Tutar', STI.Tarih
FROM solar4.FINSAT477.STI STI, solar4.FINSAT477.STK STK
WHERE STK.MalKodu = STI.MalKodu
GROUP BY STI.KynkEvrakTip, STI.IslemTur, STI.IslemTip, STK.TipKod, STI.Chk, STI.Tarih
HAVING (STI.KynkEvrakTip=1) AND (STI.IslemTur=1) AND (STI.IslemTip=1) AND (STK.TipKod='DENE') and (STI.Tarih Between '38353' and '38384' )  
Diye bir kod oluşturdum (yukarıdaki tarih alanlarını delphi ile aldırtıcam.)

Sorum şu ben bu işlemi dolaylı yoldan yapmaya karar verdim yani 12 tane query ile 12 tane dbgrid gibi düşünün.

Ama bu seferde toplama işlemini while do döngüsü ile yapamay çalışsam nasıl yapacağımı bilmiyorum yani neye göre karşılaştırmalıyım.

Şöyle bir sonuç dönüyor her sql kodu için
chk toplam tutar tarih
müşteri1 10 ....
müşteri2 20 ....
müşteri3 30 ....

chk toplam tutar tarih
müşteri1 10 ....
müşteri2 20 ....
müşteri6 30 ....


chk toplam tutar tarih
müşteri5 10 ....
müşteri9 20 ....
müşteri13 30 ....

Yani ben bu sonuçları nasıl bir toplam aldırabilirim takıldım kaldım. :oops:

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

SQL ile istediğim sonucu elde edemedim (tarih alanının sayı olarak vt de tutuluyor olmasından dolayı.)

Aşağıdaki SQL kodu ile ocak ayına ait müşteri bazında sonuca ulşatım bunu 12 ay içinde yaptım.

Kod: Tümünü seç

frmDM.Query1.Close;
frmDM.Query1.SQL.Clear;
frmDM.Query1.SQL.Add('SELECT STI.KynkEvrakTip, STI.IslemTur, STI.IslemTip, STK.TipKod, STI.Chk,');
frmDM.Query1.SQL.Add('Sum(STI.Tutar)as Tutar, STI.Tarih');
frmDM.Query1.SQL.Add('FROM solar4.FINSAT4'+SdkQueryKod.Text+'.STI STI, solar4.FINSAT4'+SdkQueryKod.Text+'.STK STK');
frmDM.Query1.SQL.Add('WHERE STK.MalKodu = STI.MalKodu');
frmDM.Query1.SQL.Add('GROUP BY STI.KynkEvrakTip, STI.IslemTur, STI.IslemTip, STK.TipKod, STI.Chk, STI.Tarih');
frmDM.Query1.SQL.Add('HAVING (STI.KynkEvrakTip=1) AND (STI.IslemTur=1) AND (STI.IslemTip=1) AND');
frmDM.Query1.SQL.Add('(STK.TipKod=''FL101'') and (STI.Tarih Between 38353 and 38383 )');
frmDM.Query1.open;



Bu kod ise 12 ay için yapılan sorgunun sonuçlarını birleştirmek için kullanıldı.

Kod: Tümünü seç

//query2 şubat
     frmDM.Query2.First;
     while not frmdm.Query2.Eof do
     begin
       if RxMemoryData1.Locate('Chk',Trim(frmDM.Query2Chk.Text),[ ])then

        begin
        //ShowMessage ('Bulundu');
        //ShowMessage (RxMemoryData1Chk.text+'-----'+frmdm.Query2Chk.text );
        RxMemoryData1.Edit;
        RxMemoryData1SubatTutar.Text:=frmdm.Query2Tutar.text;
        RxMemoryData1.Post;
        //frmDM.Query2.Next;
        end
        else
        begin
        //ShowMessage ('olmadı');
        //ShowMessage (RxMemoryData1Chk.text+'-----'+frmdm.Query2Chk.text );
        RxMemoryData1.Append;
        RxMemoryData1Chk.Text:=frmdm.Query2Chk.Text;
        RxMemoryData1SubatTutar.Text:=frmdm.Query2Tutar.text;
        RxMemoryData1.Post;
        //frmDM.Query2.Next;
        end;
        frmDM.Query2.Next;
        end;

       //query2 şubat
Sorunu Zorda olsa çözdüm.
Not: Yukarıdaki kodlar kısa olarak verilmiştir her biri birbirinin benzeri 12 tane kod bloğu var.

Saygılarımla
Çalışmalarınızda başarılar.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

SP kullanma imkanınız yok mu?
Cevapla