Как добавить баланс в следующей сумме поля, по Vendorname, за месяц / год - PullRequest
0 голосов
/ 22 января 2020

Добрый день, ребята. В моем запросе я хочу добавить текущий баланс (из предыдущей подлежащей оплате) к следующей сумме поля и вычесть его к произведенному платежу (поле для оплаты)

enter image description here

примеры кодов

select a.vendorname
    ,DATENAME(month ,(cdvdate)) as Month
    ,year(cdvdate) as Year
    , sum(b.credit) as Amount
    , sum(b.debit) as Paid
    , sum(b.credit)- sum(b.debit)  as balance 
from  (select cdvno,acct
        , sum(case when credit = 0 then debit else 0 end) as debit
        , sum(case when debit = 0 then credit else 0 end)as credit
        , trantype
    from cdvdtl 
    group by cdvno,acct, trantype    
)b
left join cdvhdr a
     on b.cdvno = a.cdvno and b.trantype = a.trantype
left join account c on b.acct = c.acct
where  b.acct='2122102'
group by a.vendorname,year(cdvdate),DATENAME(month ,(cdvdate))


order by Vendorname,case year(cdvdate)

                    when '2016' then 1
                    when '2017' then 2
                    when '2018' then 3
                    when '2019' then 4
                    end
                    ,case DATENAME(month ,(cdvdate))
                              when 'January' then 1
                          when 'February' then 2
                          when 'March' then 3
                          when 'April' then 4
                          when 'May' then 5
                          when 'June' then 6
                          when 'July' then 7
                          when 'August' then 8
                          when 'September' then 9
                          when 'October' then 10
                          when 'November' then 11
                          when 'December' then 12
         end

Я пытался использовать номер строки, но это не работает так, как я хочу

Я хочу, чтобы результат был примерно таким. Большое спасибо, просветите меня, пожалуйста

enter image description here

1 Ответ

0 голосов
/ 22 января 2020

Попробуйте это:

with cte as
    (
        select  t2.vendorname                                           as  vendorname,
                convert(char(7), t1.cdvdate, 120)                       as  YYYMM,
                DATEPART(month, t1.cdvdate)                             as  MM,
                datepart(year, t1.cdvdate)                              as  YYYY,
                sum(case when t1.credit = 0 then t1.debit else 0 end)   as debit,
                sum(case when t1.debit = 0 then t1.credit else 0 end)   as credit,
                ROW_NUMBER() over   (
                                        partition by vendorname
                                        order by convert(char(7), t1.cdvdate, 120)
                                    )                                   as rn
        from    cdvdtl t1
        inner join cdvhdr t2 on t2.cdvno = t1.cdvno 
                                and t2.trantype = t1.trantype
        group by t2.vendorname,
                convert(char(7), t1.cdvdate, 120),
                DATEPART(month, t1.cdvdate),
                datepart(year, t1.cdvdate)
    )
select  t1.vendorname       as  vendorname,
        t1.MM               as  MM,
        t1.YYYY             as  YYYY,
        t1.credit           as  Amount,
        t1.debit            as  Paid,
        t1.debit-t1.credit  as  Balance,
        t2.debit-t2.credit  as  BalanceBegin
from    cte t1
left join cte t2 on t2.vendorname = t1.vendorname
                    and t2.rn = t1.rn-1
order by t1.vendorname,
        t1.YYYMM

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...