Sql server 需要SQL对发票进行概述

Sql server 需要SQL对发票进行概述,sql-server,Sql Server,我有桌子: 与aa开具发票。ID、金额、日期、删除 用aa支付Journal。发票ID,付款,信用证,日期,付款 第二次付款由aa支付。发票ID、日期、金额、已付款是/否 我提出这个问题: select dfactuur.factuurid, isnull(jnaf,0)+isnull(oldafschr,0) afgeschr, isnull(fbetaald,0)+isnull(oldbetaald,0)betaald, bedrag, betal

我有桌子:

与aa开具发票。ID、金额、日期、删除 用aa支付Journal。发票ID,付款,信用证,日期,付款 第二次付款由aa支付。发票ID、日期、金额、已付款是/否 我提出这个问题:

select 
    dfactuur.factuurid, 
    isnull(jnaf,0)+isnull(oldafschr,0) afgeschr,
    isnull(fbetaald,0)+isnull(oldbetaald,0)betaald,
    bedrag,
    betalingen.datum,
    dfactuur.datum, 
    cast(sum(isnull((isnull(betalingen.credit,0)/dfactuur.bedrag)*cast(betalingen.datum-dfactuur.datum as integer),0))/count(*)as integer) dagen 
from 
    dfactuur 
    LEFT JOIN(
        SELECT 
            factuurid,
            ISNULL(Sum(credit),0)-ISNULL(Sum(debet),0)As FBetaald,
            datum,
            credit
        FROM 
            journaal 
        WHERE 
            Soort=1 AND 
            betaald=1
        GROUP BY 
            credit,
            datum,
            factuurid) 
        As betalingen 
        ON betalingen.factuurid=Dfactuur.factuurid 
    LEFT JOIN(
        SELECT 
            factuurid,
            ISNULL(Sum(credit),0)-ISNULL(Sum(debet),0)As JNAf 
        FROM 
            journaal 
        WHERE 
            Soort=1 AND 
            ISNULL(betaald,0)=0 
        GROUP BY 
            factuurid)
        As afschrijvingen ON afschrijvingen.factuurid=Dfactuur.factuurid
    LEFT JOIN(
        SELECT 
            factuurid , 
            ISNULL(Sum(bedrag),0) As OldBetaald 
        FROM 
            DBetaling 
        WHERE 
            betaald=1 
        GROUP BY 
            factuurid)
        As Oldbetalingen ON Oldbetalingen.factuurid=Dfactuur.factuurid
    LEFT JOIN(
        SELECT 
            factuurid, 
            ISNULL(Sum(bedrag),0) As OldAfschr 
        FROM 
            DBetaling 
        WHERE 
            ISNULL(betaald,0)=0 
        GROUP BY factuurid)
        As OldAfschr ON OldAfschr.factuurid=Dfactuur.factuurid
    LEFT JOIN(
        SELECT 
            factuurid, 
            count(*) Herh 
        FROM 
            Herhaling 
        GROUP BY 
            factuurid) 
        As Herhalingen ON Herhalingen.factuurid=dfactuur.factuurid
WHERE 
    ISNULL(verwijderd,0)=0 AND 
    dfactuur.relatienr = 1329--1284
GROUP BY 
    dfactuur.factuurid,
    afschrijvingen.jnaf,
    OldAfschr.OldAfschr,
    betalingen.fbetaald,
    Oldbetalingen.oldbetaald,
    bedrag,
    betalingen.datum,
    dfactuur.datum
这会产生许多记录,当在一张发票上支付更多款项时,这些记录会出现多次

我需要一个返回1条记录的查询,其中包含: 发票总数和未全额支付的发票数、所有发票的总金额、支付的总金额、书面总金额以及支付的平均天数


我不需要dfactuur.factuurid

请编辑以包含表中的样本数据以及您希望从该样本数据获得的输出。表journal和DBetaling中有多少记录。有了这么多的自联接,对于大型表,查询将失效。还包括表和输出的示例数据。哪个字段是指发票?请帮我们翻译一下这些字段名。肯,你知道表或记录的设计吗?我如何发送记录Emacs,可以超过100000条记录,结果可能会扫描几百条。上面的查询确实有效。Bedrag:amount betaald:payed afschrijving:write off datum:date但是查询返回了大量必须处理的记录,这使得查询速度变慢。有人知道解决方案吗??