2013-02-14 4 views
0

Как я могу заставить sql распознавать мои периоды оплаты? У меня есть таблица, содержащая список идентификаторов периода оплаты, 26 в год. Последний период оплаты 2012 года 201226, первый период оплаты 2013 года - 201301, есть ли способ для меня сделать расчет sql 201226 + 1 = 201301, 201226 + 2 = 201302?период оплаты идентификатор группы byweekely

+0

Вам понадобится что-то, называемое «Таблицей календаря». На этом сайте есть несколько вопросов, подробно описывающих их создание (смотрите вокруг). В противном случае вам нужно будет определить нестандартный тип, который зависит от базы данных; какие СУБД у вас есть? –

+0

У меня есть sql 2008 r2 – user2019324

+0

Прежде чем я разместил вопрос, я уже огляделся. Расскажите, пожалуйста, немного больше о каком-то обычном типе? – user2019324

ответ

0

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

+0

Спасибо, это решило мою проблему. Я использую эту таблицу для нескольких отчетов и использую функцию windowing для вычисления движущегося avg, и теперь у меня есть это, не добавляя больше кода в отчеты. – user2019324

0

Нечто подобное должно работать на вас. Я включил 2 дополнительное поле Year и Period в случае, если вы когда-либо имели потребность в них:

WITH CTE AS (
    SELECT 
    PayPeriodId, 
    ROW_NUMBER() OVER (ORDER BY PayPeriodId) RN, 
    Left(PayPeriodId, 4) as Year, 
    Right(PayPeriodId, 2) as Period 
    FROM PayPeriods 
) 
SELECT NextPeriod.PayPeriodId 
FROM CTE CurrentPeriod 
    JOIN CTE NextPeriod ON CurrentPeriod.RN + 1 = NextPeriod.RN 
WHERE CurrentPeriod.PayPeriodId = '201226' 

А вот некоторые примеры Fiddle.

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