2017-01-02 9 views
-1

У меня есть следующий сценарий, когда у пользователя есть определенная надбавка, принятая каждый месяц до годовой укупорки.SQL Server работает с балансом с разделом по месяцам

я успешно реализовал это, как показан here

Я споткнулся в проблему, потому что если пользователь получает повышение в течение года ежегодно укупорки должны быть ратифицированы соответственно.

Следующий запрос дал эти результаты. (Использование SQL Server 2012)

SELECT *, 
     RemainingBalance = AnnualCapping - Sum(amount) 
              OVER (
               partition BY userid, year, annualcapping 
               ORDER BY userid, year, month) 
FROM exampleTx 
WHERE userid = 1 
     AND year = 2015 

данных

userId year month monthname name surname annualCapping amount RemainingBalance 
1  2015 1  January  Joe  Black 500,00   40,00 460,00 
1  2015 2  February Joe  Black 500,00   40,00 420,00 
1  2015 3  March  Joe  Black 500,00   40,00 380,00 
1  2015 4  April  Joe  Black 500,00   40,00 340,00 
1  2015 5  May   Joe  Black 500,00   40,00 300,00 
1  2015 6  June  Joe  Black 500,00   40,00 260,00 
1  2015 7  July  Joe  Black 500,00   40,00 220,00 
1  2015 8  August  Joe  Black 500,00   40,00 180,00 
1  2015 9  September Joe  Black 1000,00   40,00 **960,00** 
1  2015 10  October  Joe  Black 1000,00   40,00 **920,00** 
1  2015 11  November Joe  Black 1000,00   40,00 **880,00** 
1  2015 12  December Joe  Black 1000,00   40,00 **840,00** 

В сентябре ежемесячное пособие должно было быть пропорционально оставшихся год.

4 months = 1000 * 4/12 = 333.33 

и остающийся остаток 293.33, 253.33, 213.33,173.33.

Мог ли я достичь этого без изменения годового поля укупорки. т.е. было бы проще, если бы ежегодное ограничение было уменьшено до 333.33, но это данные, которые у меня есть.

Изменение уценки в предыдущем месяце означало бы, что продвижение имело место. Это может произойти в течение любого месяца. Следовательно, новая укупорка должна быть пропорциональной.

+0

Как вы определяете, когда пользователь получает повышение? это информация в другой таблице? и является ли это правилом для всех пользователей? –

+0

В этом примере добавляется годовая надпись. Это происходит из другой таблицы. Общий файл sql содержит простой пример, с которым можно работать. То же правило для одних и тех же пользователей, – NotForFun

+0

Будут ли всегда последние четыре месяца иметь пропорциональный вычет? –

ответ

0

Вы можете использовать следующий запрос

Select *, 
RemainingBalance = AnnualCapping - SUM(amount) OVER (
partition by userid ,year ORDER BY userid, year,month) 
from 
exampleTx 
where userid = 1 and year = 2015 

Удалить Annual Покрывая из раздела по п.

 Смежные вопросы

  • Нет связанных вопросов^_^