两年的两次约会计算

时间:2015-11-06 16:40:17

标签: sql-server

我试图计算一个小型财务报告在两个不同年份的月数,该报告给出了每月的总计,YTD和AVG。例如,让我们说一位客户在去年四月加入我们,所以去年他们将有9个月的费用和今年的11。对于报告的这一部分,这是对这些费用的调整。并非所有月份都会进行调整,但所有月份(9和11)都会收费。

enter image description here

通过这个例子,这些是每个月的调整。我可以获得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 ....

我似乎无法就不同的年份和计算汇总一个案例陈述。任何想法都非常感激。

1 个答案:

答案 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