bakiyeye göre sıralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cvheneburi
Üye
Mesajlar: 84
Kayıt: 07 Eki 2010 02:55

bakiyeye göre sıralama

Mesaj gönderen cvheneburi » 26 Ağu 2016 06:23

s.a.
arkadaşlar müşteri ve hesap cari adında iki tablom var
ben bakiyesi carisınır dan büyük veya eşit olan kayıtları listelemek istiyorum

Kod: Tümünü seç

select MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE FROM MUSTERI,HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO AND MUSTERI.CARISINIR>=BAKIYE
GROUP BY MUSTERI.HESAPKODU
bu şekilde bir sorgu yazdım fakat bakiye diye alan bulunamadı hatası verdi yardımcı olabilir misiniz...

boreas
Üye
Mesajlar: 118
Kayıt: 04 Tem 2007 11:39
Konum: Ankara

Re: bakiyeye göre sıralama

Mesaj gönderen boreas » 26 Ağu 2016 08:27

Bu şekilde yapamazsın senin bakiye olarak belirttiğin veri sorgu esnasında oluşuyor. Öyle bir veriyide koşulda kullanamazsın. Yapman gereken view oluşturman. View oluşturduğun zaman sorgu esnasında oluşturduğun veri sanki tablonun kaydıymış gibi olur ve "where " komutuyla erişebilirsin.
....

boreas
Üye
Mesajlar: 118
Kayıt: 04 Tem 2007 11:39
Konum: Ankara

Re: bakiyeye göre sıralama

Mesaj gönderen boreas » 26 Ağu 2016 08:28

Not olarak açtığın yerin yanlış olduğunu düşünüyorum. Programlamadan çok veritabanı sorusu bu.
....

erdogan_ozkaya
Üye
Mesajlar: 808
Kayıt: 03 Eki 2007 01:00

Re: bakiyeye göre sıralama

Mesaj gönderen erdogan_ozkaya » 26 Ağu 2016 08:44

Merhaba,

belki aşağıdaki kod işine yarayabilir.

Kod: Tümünü seç

procedure TCARI_HESAP_BAKIYELERI.btn1Click(Sender: TObject);
var
         Bookmark : TBookmark;
         BORC : Real;
         ALACAK : Real;
         BAKIYE : Real;
 begin

  chkFATURALAR.Checked:=True;
  label6.Caption:='Giriş/Çıkış Faturaları    ';

 qryHESAP_HAREKETLERI_DB.Close;
 qryHESAP_HAREKETLERI_DB.SQL.Clear;
 qryHESAP_HAREKETLERI_DB.SQL.Add(' declare @bakiyeler table '
                                +' (FIRMA_KIMLIK bigint,HESAP_KODU nvarchar(500),CALISILAN_FIRMA_KIMLIK nvarchar(500),FIRMA_TEL_1 nvarchar(500),'
                                +' FIRMA_UNVANI nvarchar(500),BORC numeric(18,2),ALACAK numeric(18,2),BAKIYE numeric(18,2),DURUM  nvarchar(500)) '
                                +' insert into @bakiyeler '
                                +' select ct.FIRMA_KIMLIK,ct.HESAP_KODU,ct.CALISILAN_FIRMA_KIMLIK,ct.FIRMA_TEL_1,ct.FIRMA_UNVANI,  '
                                +' sum(ch.FIS_GENEL_TOP_BORC) as BORC,sum(ch.FIS_GENEL_TOP_ALACAK) as ALACAK , '
                                +'(sum(ch.FIS_GENEL_TOP_BORC) - sum(ch.FIS_GENEL_TOP_ALACAK)) as BAKIYE, ct.FIRMA_UNVANI '
                                +' from HESAP_HAREKETLERI as ch, FIRMALAR as ct where ch.CARI_KART_KIMLIK = ct.FIRMA_KIMLIK   '
                                +' AND  ct.DURUMU  = '+#39+'Aktif'+#39+'');

                                if chkFATURALAR.Checked=True
                                then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+' or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+'  or ch.FIS_TIPI <> '+#39+'Firma Zimmet'+#39+')');

                                if chkFATURALAR.Checked=False
                                then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+' or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+'  or ch.FIS_TIPI = '+#39+'Firma Zimmet'+#39+')');

                              //   if chkZIMMETLER.Checked=True
                              //  then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI = '+#39+'Firma Zimmet'+#39+' or ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+'or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+')');

                              // if chkZIMMETLER.Checked=False
                               // then qryHESAP_HAREKETLERI_DB.SQL.Add(' AND (ch.FIS_TIPI <> '+#39+'Firma Zimmet'+#39+' or ch.FIS_TIPI = '+#39+'Satış Faturası'+#39+'or ch.FIS_TIPI = '+#39+'Alış Faturası'+#39+')');


                                 {
                                +' /*AND
                                +' CHMUSTERITIP='Alıcı+Satıcı' OR '
                                +' CHMUSTERITIP='Alıcı' OR   '
                                +' CHMUSTERITIP='Satıcı'   '
                                +' */
                                     }
 qryHESAP_HAREKETLERI_DB.SQL.Add(' group by ct.FIRMA_KIMLIK , ct.FIRMA_TEL_1, ct.HESAP_KODU,ct.CALISILAN_FIRMA_KIMLIK,ct.FIRMA_UNVANI Order By FIRMA_KIMLIK ASC '
                                +' declare @borclular table (FIRMA_KIMLIK bigint);  '
                                +' insert into @borclular select FIRMA_KIMLIK from @bakiyeler where BAKIYE > 0 '
                                +' declare @alacaklilar table (FIRMA_KIMLIK bigint); '
                                +' insert into @alacaklilar select FIRMA_KIMLIK from @bakiyeler where BAKIYE < 0 '
                                +' declare @temizler table (FIRMA_KIMLIK bigint); '
                                +' insert into @temizler select FIRMA_KIMLIK from @bakiyeler where BAKIYE = 0 or BAKIYE = null '
                                +' update @bakiyeler set durum = '+#39+'Borçlu'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @borclular ) '
                                +' update @bakiyeler set durum = '+#39+'Alacaklı'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @alacaklilar ) '
                                +' update @bakiyeler set durum = '+#39+'-'+#39+' where FIRMA_KIMLIK in ( select FIRMA_KIMLIK from @temizler ) '
                                +' select * from @bakiyeler  ');
  qryHESAP_HAREKETLERI_DB.Open; 
  begin
                   edit_TOPLAM_BORC.Text :='0';
                   qryHESAP_HAREKETLERI_DB.Open;
                   Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                   qryHESAP_HAREKETLERI_DB.DisableControls;
                   BORC := 0;
               try
                   qryHESAP_HAREKETLERI_DB.First;
                    while not qryHESAP_HAREKETLERI_DB.EOF do
                    begin
                     BORC := BORC + qryHESAP_HAREKETLERI_DB.fieldbyname('BORC').Value;
                     qryHESAP_HAREKETLERI_DB.Next;
                     edit_TOPLAM_BORC.Text := FloatToStr(BORC) ;
                    end;
                 finally
                    qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                    qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                    qryHESAP_HAREKETLERI_DB.EnableControls;
                  end;
                  begin
                   edit_TOPLAM_ALACAK.Text :='0';
                   qryHESAP_HAREKETLERI_DB.Open;
                   Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                   qryHESAP_HAREKETLERI_DB.DisableControls;
                   ALACAK := 0;
                  try
                   qryHESAP_HAREKETLERI_DB.First;
                    while not qryHESAP_HAREKETLERI_DB.EOF do
                    begin
                     ALACAK := ALACAK + qryHESAP_HAREKETLERI_DB.fieldbyname('ALACAK').Value;
                     qryHESAP_HAREKETLERI_DB.Next;
                     edit_TOPLAM_ALACAK.Text := FloatToStr(ALACAK) ;
                    end;
                    finally
                     qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.EnableControls;
                 end;
                      begin
                      edit_TOPLAM_BAKIYE.Text :='0';
                      qryHESAP_HAREKETLERI_DB.Open;
                      Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                      qryHESAP_HAREKETLERI_DB.DisableControls;
                      BAKIYE := 0;
                  try
                      qryHESAP_HAREKETLERI_DB.First;
                       while not qryHESAP_HAREKETLERI_DB.EOF do
                       begin
                         BAKIYE := BAKIYE + qryHESAP_HAREKETLERI_DB.fieldbyname('BAKIYE').Value;
                         qryHESAP_HAREKETLERI_DB.Next;
                         edit_TOPLAM_BAKIYE.Text := FloatToStr(BAKIYE) ;
                       end;
                    finally
                     qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.EnableControls;
                    end;
              end;
          end;
       end;
end;

erdogan_ozkaya
Üye
Mesajlar: 808
Kayıt: 03 Eki 2007 01:00

Re: bakiyeye göre sıralama

Mesaj gönderen erdogan_ozkaya » 26 Ağu 2016 08:48

Kod: Tümünü seç

procedure TCARI_HESAP_BAKIYELERI.cbb1Change(Sender: TObject);
 var
         Bookmark : TBookmark;
         BORC : Real;
         ALACAK : Real;
         BAKIYE : Real;
begin 
                  if cbb1.ItemIndex=1
                  then   qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'Borçlu'+#39;
                  if cbb1.ItemIndex=2
                  then   qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'Alacaklı'+#39;
                  if cbb1.ItemIndex=3
                  then   qryHESAP_HAREKETLERI_DB.filter:='DURUM='+#39+'-'+#39;
                  qryHESAP_HAREKETLERI_DB.Filtered:=true;
     begin
                   edit_TOPLAM_BORC.Text :='0';
                   qryHESAP_HAREKETLERI_DB.Open;
                   Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                   qryHESAP_HAREKETLERI_DB.DisableControls;
                   BORC := 0;
               try
                   qryHESAP_HAREKETLERI_DB.First;
                    while not qryHESAP_HAREKETLERI_DB.EOF do
                    begin
                     BORC := BORC + qryHESAP_HAREKETLERI_DB.fieldbyname('BORC').Value;
                     qryHESAP_HAREKETLERI_DB.Next;
                     edit_TOPLAM_BORC.Text := FloatToStr(BORC) ;
                    end;
                 finally
                    qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                    qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                    qryHESAP_HAREKETLERI_DB.EnableControls;
                  end;
                  begin
                   edit_TOPLAM_ALACAK.Text :='0';
                   qryHESAP_HAREKETLERI_DB.Open;
                   Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                   qryHESAP_HAREKETLERI_DB.DisableControls;
                   ALACAK := 0;
                  try
                   qryHESAP_HAREKETLERI_DB.First;
                    while not qryHESAP_HAREKETLERI_DB.EOF do
                    begin
                     ALACAK := ALACAK + qryHESAP_HAREKETLERI_DB.fieldbyname('ALACAK').Value;
                     qryHESAP_HAREKETLERI_DB.Next;
                     edit_TOPLAM_ALACAK.Text := FloatToStr(ALACAK) ;
                    end;
                    finally
                     qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.EnableControls;
                 end;
                      begin
                      edit_TOPLAM_BAKIYE.Text :='0';
                      qryHESAP_HAREKETLERI_DB.Open;
                      Bookmark := qryHESAP_HAREKETLERI_DB.GetBookmark;
                      qryHESAP_HAREKETLERI_DB.DisableControls;
                      BAKIYE := 0;
                  try
                      qryHESAP_HAREKETLERI_DB.First;
                       while not qryHESAP_HAREKETLERI_DB.EOF do
                       begin
                         BAKIYE := BAKIYE + qryHESAP_HAREKETLERI_DB.fieldbyname('BAKIYE').Value;
                         qryHESAP_HAREKETLERI_DB.Next;
                         edit_TOPLAM_BAKIYE.Text := FloatToStr(BAKIYE) ;
                       end;
                    finally
                     qryHESAP_HAREKETLERI_DB.GotoBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.FreeBookmark(Bookmark);
                     qryHESAP_HAREKETLERI_DB.EnableControls;
                    end;
              end;
          end;
       end;
end;

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: bakiyeye göre sıralama

Mesaj gönderen vkamadan » 26 Ağu 2016 11:33

Merhabalar ,
Kullandığınız database nedir belirtmemişsiniz ancak MySQL ve MSSQL de yer alan "Derived SQL" yapısı nı destekleyen bir database motoru kullanıyorsanız aşağıdaki gibi kullanabilirsiniz.

Kod: Tümünü seç

select * from (select MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE FROM MUSTERI,HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO AND MUSTERI.CARISINIR>=BAKIYE
GROUP BY MUSTERI.HESAPKODU) as yenitablo order by bakiye
Bu noktada yaptığımız sizin ilşk yazdığınız SQL i "yenitablo" adında bir veri setine dönüşltürdük en üstte ki SELECT ifademizle tüm sahalarınızı seçtik ve sonunda bakiye isimli sahaya sıralam yaptırdık.
Volkan KAMADAN
www.polisoft.com.tr

Kullanıcı avatarı
esistem
Üye
Mesajlar: 462
Kayıt: 02 Eki 2007 10:22
İletişim:

Re: bakiyeye göre sıralama

Mesaj gönderen esistem » 26 Ağu 2016 11:53

Selam aşağıdaki şekilde HAVING kullanarak çalışabilir belki, denemedim kodu.

Kod: Tümünü seç

select
MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,
SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE
FROM MUSTERI, HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO
GROUP BY MUSTERI.HESAPKODU
HAVING (SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK))>=MUSTERI.CARISINIR


Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: bakiyeye göre sıralama

Mesaj gönderen vkamadan » 26 Ağu 2016 12:50

Merhaba ,
ben sorunun başlığından doğrudan bakiyeye göre SIRALAMA ya kanalize olup sorunuzu sonuna kadar okumadan cevap vermişim kusura bakmayın
@esistem in önerisine katılıyorum sadece minik bir düzeltme having kısmı tüm veri seti oluştuktan sonra çalıştığı için ve sizin veri setinizde hesaplanmış olarak "bakiye" sahası yer aldığı için having de birdaha hesaplatmanıza gerek olmadan direk aşağıdaki gibi kullanabilirsiniz. (zaten veritabanı yeniden hesaplamayacak ama yazımı daha sade olmuş olacak)

Kod: Tümünü seç

select
MUSTERI.HESAPKODU,MUSTERI.ADI,MUSTERI.CARISINIR,
HESAPCARI.HESAPNO,
SUM(HESAPCARI.BORC)-SUM(HESAPCARI.ALACAK) AS BAKIYE
FROM MUSTERI, HESAPCARI
WHERE MUSTERI.HESAPKODU=HESAPCARI.HESAPNO
GROUP BY MUSTERI.HESAPKODU
HAVING BAKIYE>=MUSTERI.CARISINIR
Volkan KAMADAN
www.polisoft.com.tr

cvheneburi
Üye
Mesajlar: 84
Kayıt: 07 Eki 2010 02:55

Re: bakiyeye göre sıralama

Mesaj gönderen cvheneburi » 27 Ağu 2016 02:42

tşk ederim eticari.com ve vkamadan

thelvaci
Kıdemli Üye
Mesajlar: 769
Kayıt: 11 Tem 2010 06:17
Konum: Istanbul
İletişim:

Re: bakiyeye göre sıralama

Mesaj gönderen thelvaci » 27 Ağu 2016 11:53

MUSTERI.HESAPKODU alanına göre gruplama yapılıyor ise, gruplanmamış alanlar yalın halde select sorgusunun içinde alan olarak bulunamazlar. Aggragate fonksiyonlar ile sarmalanmaları gerekir yada group by kısmında gruplanmış olmaları gerekir.

Cevapla