我有以下租赁表
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..
有没有办法通过单个查询有效地完成此操作?
答案 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