我试图计算一个小型财务报告在两个不同年份的月数,该报告给出了每月的总计,YTD和AVG。例如,让我们说一位客户在去年四月加入我们,所以去年他们将有9个月的费用和今年的11。对于报告的这一部分,这是对这些费用的调整。并非所有月份都会进行调整,但所有月份(9和11)都会收费。
通过这个例子,这些是每个月的调整。我可以获得2014年4月的最短交易日期,以帮助我计算2014年的AVG。以上是不正确的。这是YTD / 3,而不是YTD / 9。但我可以计算一下,但我无法在2015年,YTD / 11上工作。
我现在所拥有的(简化版)
declare @StartDate DATETIME = getdate()
, @MinDate DATETIME
select @MinDate = min(txndate)
from dbo.txn
select d.year,
d.jan,
d.feb,
etc...
d.YTD/--how to calculate here??
from ....
我似乎无法就不同的年份和计算汇总一个案例陈述。任何想法都非常感激。
答案 0 :(得分:0)
create table #txn
(
year smallint,
Jan money, Feb money, Mar money, Apr money,
May money, Jun money, Jul money, Aug money,
Sep money, Oct money, Nov money, Dec money
)
insert #txn
values(2014,null,null,null,null,null,null,null,null,null,95,36.89,95),
(2015,100,6389.27,null,null,1035,257,669.05,0,null,514,2791.01,null)
select year, month, money
from #txn
unpivot
(
money
for month in (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
) unpivotalias
;with aggregate as
(
select year, sum(money) as 'YTD', sum(money)/count(*) as 'AVG'
from #txn
unpivot
(
money
for month in (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
) unpivotalias
group by year
)
select t.year,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,YTD,AVG
from #txn as t join aggregate as a on t.year = a.year
order by t.year