如何使用sql计算投影总和?

时间:2016-08-23 15:45:55

标签: sql database sum projection

我有以下租赁表

Lease_id Apt_id Resident_id Start_Date End_Date   Upfront_Amt Monthly_Fee
101      110    1001        02/01/2015 07/31/2015 250          500
102      111    1002        03/01/2015 02/29/2016 1000         2000
103      112    1003        04/01/2015 03/31/2016 750          1500

我想要计算的是每月费用的收入预测。 例如:

01/2015 0 (No lease active)
02/2015 500 (From Lease 101)
03/2015 500 + 2000 (From Lease 101 and 102)
04/2015 500 + 2000 + 1500 (From Lease 101, 102 and 103)
:
:
08/2015 2000 + 1500 (From lease 102 and 103)
etc..

有没有办法通过单个查询有效地完成此操作?

2 个答案:

答案 0 :(得分:1)

这样的事情可以起作用:

SELECT l1.[Start_Date], SUM(l2.SumFee)
FROM Lease as l1, (SELECT [Start_Date],SUM(Monthly_Fee) As SumFee
FROM Lease
GROUP BY [Start_Date]) as l2
WHERE l1.[Start_date]>=l2.[Start_Date]
GROUP BY l1.[Start_Date]

另一种方法是:

SELETC l1.Start_Date, l1.Monthly_Fee, SUM(l2.Fee) as CumulativeSum
FROM Lease as l1
INNER JOIN Lease as l2 ON l1.Start_Date >= l2.Start_Date
GROUP BY l1.Start_Date, l1.Monthly_Fee
ORDER BY l1.Start_Date

答案 1 :(得分:1)

select
    format(m.Lease_Month, 'MMM yyyy') as Lease_Month,
    sum(sum(Monthly_Fee)) over (partition by m.Lease_Month) as Projection
from
    <list of months> m left outer join
    Lease l
        on m.Lease_Month between l.Start_Date and l.End_Date
group by
    m.Lease_Month
order by
    m.Lease_Month;

有很多方法可以生成月份列表。这是一个:

declare @num_Months int = 16;
declare @start_Date date = '20150101';

with months as (
    select @start_Date as Lease_Month, 1 as Month_Num
    union all
    select dateadd(month, Month_Num, @start_Date), Month_Num + 1
    from months
    where Month_Num < @num_Months
) ...

将它们放在一起并看到它在这里运行:http://rextester.com/YUAF69376