Sırayla Borc ve Alacak Hesaplamak(Çözüldü)

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Sırayla Borc ve Alacak Hesaplamak(Çözüldü)

Mesaj gönderen softdestek »

Not:Ben her zaman table isimlerini ve alan isimlerini büyük harfle tanımlarım.
Eğer bunun kendisine hakaret olduğunu düşünen varsa bu mesajı okumasına gerek yok.

HESAPKODLAR Tablosu
HESAPKODU HESAPADI
100 KASA HESABI
101 GENEL GİDERLER
102 DİĞER GELİRLER

HESAPLAR Tablosu
HESAPKODU TARIH BORC ALACAK
100 02.01.2014 52 0
101 05.04.2014 1245 0
102 06.02.2014 0 96

Yapmak istediğim procedure şu

Hesapkodlar
tablosunundkai hesapkodlarını sıralayacak
CURSOR komutu ile

Sıralarkende verilen tarih aralığına göre tüm hesapların sıra ile
SUM(BORC) VE SUM(ALACAK) Değerlerini bulmak.

Bunu Ms SQL serverda procedure olarak nasıl yazarız.

Bu procedure için firebird da yazdığım kod şu şekilde.

Kod: Tümünü seç

SET TERM ^ ;

create or alter procedure MYMIZAN (
    PBASKOD varchar(30),
    PBITKOD varchar(30),
    SEVIYEMIN integer,
    SEVIYEMAX integer,
    PBASTARIH date,
    PBITTARIH date)
returns (
    HESAPKODU varchar(30),
    HESAPADI varchar(200),
    SEVIYE integer,
    BORC double precision,
    ALACAK double precision,
    BORCBAKIYE double precision,
    ALACAKBAKIYE double precision,
    CARIKOD integer,
    FIRMA varchar(255))
as
begin
FOR

SELECT HesapKodlar.HesapKodu, HesapKodlar.HesapAdi,HesapKodlar.SEVIYE,HesapKodlar.CARIKOD,carikodlar.firma
FROM  HesapKodlar
LEFT OUTER JOIN CARIKODLAR ON (HESAPKODLAR.CARIKOD=CARIKODLAR.CARIKOD)

WHERE  
         (HesapKodlar.HesapKodu  BETWEEN  :pbaskod    AND :pbitkod)
   AND   (HESAPKODLAR.SEVIYE     BETWEEN  :SEVIYEMIN  AND :SEVIYEMAX)


  
ORDER BY HesapKodu
INTO: HESAPKODU, HESAPADI,SEVIYE,carikod, FIRMA
DO   BEGIN
            BORCBAKIYE=0;
            ALACAKBAKIYE=0;
            
         select round(sum(HESAPLAR.BORC),2),round(SUM(HESAPLAR.ALACAK),2) FROM HESAPLAR

         WHERE (HESAPLAR.hesapkodu  LIKE  :HESAPKODU || '%')
               AND
               (HESAPLAR.tarih  between :PBASTARIH AND :PBITTARIH)


            INTO  :BORC,ALACAK;
            
          IF (:BORC>0) THEN
               IF  (:ALACAK IS NULL) THEN BORCBAKIYE=:BORC;

          IF  (:ALACAK>0) THEN
               IF  (:BORC IS NULL) THEN ALACAKBAKIYE=ALACAK;
         
          IF (:BORC > :ALACAK) THEN BORCBAKIYE=:BORC-ALACAK;
          IF (:ALACAK>:BORC) THEN ALACAKBAKIYE=:ALACAK-BORC;
   
            BORCBAKIYE=round(BORCBAKIYE,2);
          ALACAKBAKIYE=round(ALACAKBAKIYE,2);
            
      /*SELECT *  FROM MYMIZAN('100','900',0,3,'01.01.2010','12.12.2010')*/

SUSPEND;
      END
      END^

SET TERM ; ^
En son softdestek tarafından 18 Nis 2015 07:11 tarihinde düzenlendi, toplamda 5 kere düzenlendi.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: SIRAYLA BORC VE ALACAK HESAPLAMAK

Mesaj gönderen freeman35 »

Başlık dahil mesajda küçük harfler kullanın...
mesajı tekrar düzenleyin.
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 !!!
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: Sırayla Borc ve Alacak Hesaplamak(Çözüldü)

Mesaj gönderen softdestek »

MSSQL de bir procedure yazdım.Fetch komutu ile sıra ile kayıtları gezip çıktını ise bir tabloya insert ediyorum..
Not:yukardaki procedure firebird de 2,5dk civarında 7000 civarında hesapkosundan mizan çıkarabilirken MS SQL de aynı işlemi 14s aniyede yapıyorum.
Meraklısına duyurulur.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Sırayla Borc ve Alacak Hesaplamak(Çözüldü)

Mesaj gönderen tuna »

Sanırım bu iş için procedure kullanmanıza gerek yoktu. Ms sql için partition komutunu araştırmanızı öneririm. Ben böyle işlemleri sql de 2sn'de çalıştırıyorum.
Cevapla