sql >> データベース >  >> RDS >> Sqlserver

発行された請求書への支払の累計

    with DateRange as
    (
      select convert(date, '2020-11-01') as DateValue
      union all
      select dateadd(day, 1, dr.DateValue)
      from DateRange dr
      where dr.DateValue < '2020-11-30'
    ),
    InvoicedTotal as
    (
      select dr.DateValue,
             isnull(sum(i.Total), 0) as Invoiced
      from DateRange dr
      left join Invoices i
        on i.InvoiceDate = dr.DateValue
      group by dr.DateValue
    ),
    PaidTotal as
    (
      select dr.DateValue,
             isnull(sum(case
                          when i.InvoiceDate between '2020-11-01' and '2020-11-30' -- check if matching invoice was found
                          then p.Total                 -- YES = include Total amount in sum
                          else 0                       -- NO  = exclude total amount from sum
                        end), 0) as Paid
      from DateRange dr
      left join Payments p
        on p.PaymentDate = dr.DateValue
      left join Invoices i
        on  i.InvoiceId = p.InvoiceId -- check for invoice related to payment
      group by dr.DateValue
    )
    select convert(varchar(10), dr.DateValue, 102) as [YYYY.MM.DD],
           it1.Invoiced as [Invoiced],
           it3.Invoiced as [CumInvoiced],
           pt1.Paid as [Paid],
           pt3.Paid as [CumPaid],
           it3.Invoiced - pt3.Paid as [RunningTotal]
    from DateRange dr
    join InvoicedTotal it1
      on it1.DateValue = dr.DateValue
    join PaidTotal pt1
      on pt1.DateValue = dr.DateValue
    cross apply ( select sum(it2.Invoiced) as Invoiced
                  from InvoicedTotal it2
                  where it2.DateValue <= dr.DateValue ) it3
    cross apply ( select sum(pt2.Paid) as Paid
                  from PaidTotal pt2
                  where pt2.DateValue <= dr.DateValue ) pt3
    order by dr.DateValue;
    

    フィドル milo2011 による




    1. SQLServer2017の概要

    2. 動的jqueryフォームフィールドからmysqlに行を追加する

    3. SQL を使用して、今後 5 年間、毎月同じ日を選択しますか?

    4. 質問と回答のテーブルに参加しているレコードを数える