Sql veri alınırken excel formülleri hızlı hesaplanması

Katılım
15 Nisan 2010
Mesajlar
111
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
04-10-2023
merhaba ekteki dosyada yaklaşık 10.000 satırdan fazla sql dönüşü olan dosya var yaşlandırma ve borç kapama takip için kullanmaya çalışıyorum fakat excel formülleri çok fazla kasma yapıyor 10-15 dk hesaplama yapması sürüyor formülleri kısaltma yada sql üzerine bu formülleri adapte etme yolunu bilen varmı?

Sql konusunda Vedat Özer beyin örneklerinden destek alarak Sql sorguları yaptım verileri aldım ama yaşlandırma ve borç kapama kısmını sql view e ekleyemedim excel den tamamladım.
 

Ekli dosyalar

Katılım
5 Şubat 2005
Mesajlar
114
Altın Üyelik Bitiş Tarihi
03-03-2022
Merhabalar, kritik işlem Cari Adına Göre toplam yapılması işlemi (AD sütunu), sql deki karşılığı Cariye göre gruplayarak alt toplam alma. Bunun için önce sql listeni cari bazlı sıraya koyup sıra numarası verebilirsin (ROW_NUMBER() OVER (ORDER BY CARDREF, SIGN DESC, DISCDUEDATE, PROCDATE) AS SIRANO gibi). Geçici bir tabloda sakladığın bu verileri sonradan sıra numarasına göre çağırarak o tarihe kadar olan toplamları aldırabilirsin. (ETOPLA($B$4:B375;B6;$AB$4:AB375) işlemi)

Ortalama vade hesabı için kullandığım sorgunun ilgili alanlarını ekliyorum:

SQL:
...
INSERT INTO ##VadeTable
    SELECT
            ROW_NUMBER() OVER (ORDER BY  CARDREF, SIGN DESC, DISCDUEDATE, PROCDATE) AS SIRANO,
            PT2.CARDREF, PT2.DISCDUEDATE, PT2.PROCDATE, PT2.SIGN,
            SUM(CASE WHEN TRCURR=1 OR TRCURR=20  THEN TRRATE*TRNET
                     WHEN SIGN=0 AND PAIDINCASH =0 THEN TOTAL
                     WHEN SIGN=0 AND PAIDINCASH=1 THEN 0
                     WHEN SIGN=1 THEN -1*TOTAL END) AS DEGER
    FROM
             LG_060_04_PAYTRANS PT2
    WHERE 
             PT2.CANCELLED=0 AND PT2.CARDREF NOT IN (13237, 13238, 18523, 15089, 18245)
    GROUP BY 
             CARDREF, PT2.DISCDUEDATE, SIGN, PROCDATE
...

    INSERT INTO ##VadeTable2
        SELECT
        *,
        CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END AS POZITIF,
        CASE WHEN (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END)=0 THEN 0 ELSE (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END) - (CASE WHEN KUMULATIF2<=0 THEN 0 ELSE KUMULATIF2 END) END AS TUTAR,
        CASE WHEN (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END)=0 THEN 0 ELSE DATEDIFF(DAY, GETDATE(), VT.DISCDUEDATE) END AS VADEGUN,
        (CASE WHEN (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END)=0 THEN 0 ELSE (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END) - (CASE WHEN KUMULATIF2<=0 THEN 0 ELSE KUMULATIF2 END) END)*(CASE WHEN (CASE WHEN KUMULATIF<=0 THEN 0 ELSE KUMULATIF END)=0 THEN 0 ELSE DATEDIFF(DAY, GETDATE(), VT.DISCDUEDATE) END) AS TOPLACARP
        FROM ##VadeTable VT
        OUTER APPLY (SELECT ISNULL(SUM(DEGER), 0) AS KUMULATIF FROM ##VadeTable WHERE CARDREF=VT.CARDREF AND SIRANO<=VT.SIRANO) AS CUMULATIVE --***KÜMÜLATİF TOPLAM YAPILAN SATIR, YANİ SANA LAZIM OLAN! AYNI TABLOYU İKİ KEZ ÇAĞIRARAK SIRA NUMARASINA GÖRE ALT TOPLAM ALABİLİRSİN.***
        OUTER APPLY (SELECT ISNULL(SUM(DEGER), 0) AS KUMULATIF2 FROM ##VadeTable WHERE CARDREF=VT.CARDREF AND SIRANO<VT.SIRANO) AS CUMULATIVE2
Kümülatif toplam ile hesaplamanı yapabilirsin. Diğer formüllerin CASE-WHEN koşuluyla çözülebilir.
 
Katılım
5 Şubat 2005
Mesajlar
114
Altın Üyelik Bitiş Tarihi
03-03-2022
Bu arada geçici tablo yerine CTE (common table expression) kullanarak da sorguyu hazırlayabilirsiniz.
 
Katılım
15 Nisan 2010
Mesajlar
111
Excel Vers. ve Dili
2003
Altın Üyelik Bitiş Tarihi
04-10-2023
merhaba cevabınız için çok teşekkür ederim bu şekilde logoda hazırlanmış bir yürüyen bakiyeli bir sorgunuz var mı yada ödeme tahsilat ile ilgili
 
Üst