2013-05-31 3 views
0

Я успешно рассчитываю среднемесячный среднемесячный отпуск для сотрудника на основе начала и окончания года в этом случае в 2013 году. Однако, когда начинается сотрудник после начала года их средние значения должны начинаться с даты найма. Мне нужно выяснить, как рассчитать средний показатель за 12 месяцев для сотрудника, который нанимает дату начала работы после начала года.12 Месяц за месяц, за исключением случаев, когда дата найма больше начала года

Вот мой текущий запрос до сих пор:

DECLARE @begDt DATETIME, @endDt DATETIME 
    SET @begDt = DATEADD(YEAR, DATEDIFF(YEAR, 0,DATEADD(YEAR, -1, GETDATE())), 0) 
    SET @endDt = DATEADD(MILLISECOND, -3, DATEADD(YEAR, DATEDIFF(YEAR, 0, DATEADD(YEAR, -1, GETDATE())) + 1, 0)) 

    select 
    [Account Executive] = v.Name_AccountExecutive 
, [YTD Production] = cast(sum (case when v.Process_FundingDt between @begDt and @endDt then v.Loan_LoanAmt else 0 end) as int) 
, [Monthly Average] = cast(sum (case when v.Process_FundingDt between @begDt and @endDt then v.Loan_LoanAmt else 0 end) 
/(case when @begDt = '1/1/2012' then 
     case when v.Name_AccountExecutive = 'HIEB, BRANDON' then 7 when v.Name_AccountExecutive = 'AMORATI, KAREN' then 8 else 12 end 
     else (datepart(m, @endDt)) end) as int) 
from LOS.LoanView v 
group by v.Name_AccountExecutive 
+2

Если Боб нанят 2 марта 2012 года, должен ли он быть средним на 2 марта 2012 года по 31 декабря 2012 года или до 1 марта 2013 года? – lins314159

+0

Это должно быть до конца года, так как я понимаю, что он строит отчет. – ApplePie

+0

lins314159, правильный. Запрос, который я опубликовал, рассчитан на год. Так что, если Боб нанят 2 марта 2013 года, его средний возраст будет с 3/2/2013 по 31 мая 2013 года (сегодня). –

ответ

0

Эй, ребята, просто хотел, чтобы ответить на этот вопрос, поскольку я не образовывали вопрос правильно, и это только казалось запутанным, Буц Heres, как я делаю это , Если theres лучший способ, не стесняйтесь комментировать, но это работает пока.

, [Monthly Average] = cast(sum (case when v.Process_FundingDt between @begDt and @endDt then v.Loan_LoanAmt else 0 end) as int) 
/(case when aa.End_Date is NULL then 
     (
     case when Year(aa.Hire_Date)< Year(@begDt) and Year(@begDt)<Year(getdate()) then 12 -- hired anytime before the currrent reporting year and current reporting year is not current year. 
      when Year(aa.Hire_Date) < Year(@begDt) and Year(@begDt)=Year(getdate()) then MONTH(getdate())-- hired anytime before the currrent reporting year and current reporting year is the current year 
      when Year(aa.Hire_Date) = Year(@begDt) and Year(@begDt)<Year(getdate()) then 12-Month(aa.Hire_Date) -- hired same as reporting year but the reporting year is not same as current year 
      when Year(aa.Hire_Date) = Year(@begDt) and Year(@begDt)=Year(getdate()) then MONTH(getdate())-Month(aa.Hire_Date) -- hired same as reporting year and the reporting year is same as current year 
     end 
    ) 
     else 
     (
     Case when Year(aa.End_Date)<Year(@begDt) then NULL 
      when Year(aa.End_Date)=Year(@begDt) and YEAR(aa.Hire_Date)<Year(aa.End_Date) then MONTH(aa.End_Date) -- end date is same as reporting year, was hired preivous year, current year doesn't matter 
      when Year(aa.End_Date)=Year(@begDt)and YEAR(aa.Hire_Date)=Year(aa.End_Date) then MONTH(aa.End_Date)-MONTH(aa.Hire_Date) -- end year, start year and reporting year is same, current year doesn't matter 
      when Year(aa.End_Date)>Year(@begDt) and YEAR(aa.Hire_Date)=Year(@begDt) then 12-MONTH(aa.Hire_Date) 
      when Year(aa.End_Date)>Year(@begDt) and YEAR(aa.Hire_Date)<Year(@begDt) then 12 
     end 
    ) 
     end 
) 
Смежные вопросы