2013-02-14 62 views
0

我该如何让sql来识别我的薪酬期限?我有表格,其中包含支付期限ID,每年26。 2012年的最后一个付款期为201226,2013年的第一个付款期为201301,有没有办法让我的sql计算201226 + 1 = 201301,201226 + 2 = 201302?支付周期ID按周分组

+0

你会想要一个名为“日历表”的东西 - 这个网站上有几个问题详细说明他们的创作(环顾四周)。否则,您需要定义某种类型的自定义类型,这与数据库相关;你有什么RDBMS? – 2013-02-14 00:24:37

+0

我有sql 2008 r2 – user2019324 2013-02-14 00:27:06

+0

在我发布这个问题之前,我已经环顾四周。你应该多解释一下某种类型的自定义类型? – user2019324 2013-02-14 00:46:14

回答

0

如果您想保留当前的设计,您可以简单地添加另一个字段,即增量序列号。使用序号和当前字段的组合,您可以达到下一个或前一个付款期间

+0

谢谢,这解决了我的问题。我使用这个表格来查看几个报告,并使用窗口函数来计算移动平均值,现在我可以在不添加更多代码的情况下获得报告。 – user2019324 2013-02-14 18:40:03

0

这样的事情应该适合您。我包括2个额外的领域YearPeriod如果你曾经需要他们:

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