2015-11-06 3 views
0

Я пытаюсь рассчитать количество месяцев в два разных года за небольшой финансовый отчет, который дает общее количество за каждый месяц, с начала года и AVG. Например, предположим, что клиент присоединился к нам в апреле прошлого года, так что в прошлом году у них было бы 9 месяцев сборов и в этом году 11. Для этой конкретной части отчета это касается корректировок, сделанных по этим обвинениям. Не все месяцы будут иметь корректировки, но все месяцы (9 и 11) будут взимать плату.Расчет двух дат за два года

enter image description here

В этом примере эти настройки для каждого месяца. Я могу получить минимальную дату транзакции в апреле 2014 года, чтобы помочь мне рассчитать AVG на 2014 год. Выше неверно. Это YTD/3, а не YTD/9, как и должно быть. Но это я могу рассчитать, но я не могу заставить его работать в 2015 году, с начала года/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

Это прекрасное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

ответ

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 
Смежные вопросы