按季度划分

时间:2013-03-21 17:02:25

标签: sql-server sql-server-2008-r2

如何添加另一个列,每季度(1月 - 3月,4月 - 6月,6月 - 9月)对其进行分区,然后添加另一个计数器以跟踪季度并定义2011年第1季度与2012年第1季度不同基本上我将如何添加Quarters和Tracker Column。我查看了ROW_NUMBER(),NTILE函数,但不确定如何将它们与月份结合起来。

--- Period --- Quarters---Tracker
2012-05-06       2          1
2012-05-20       2          1          
2012-06-03       2          1
2012-07-01       3          2
2012-08-12       3          2
2012-08-26       3          2
2012-09-09       3          2
2012-10-07       4          3
2012-10-21       4          3
2012-11-04       4          3
2012-11-18       4          3
2012-12-02       4          3
2012-12-16       4          3
2012-12-30       4          3 
2013-01-13       1          4
2013-01-27       1          4

真的很难!

2 个答案:

答案 0 :(得分:2)

我将季度CASE逻辑放在表格定义中,但您也可以将其放入查询中,这样您就不必修改表格了。

Create  Table Blah 
(
        SampleDate Date Default(Convert(Date,Getdate())),
        Quarters As (   Case
                        When    Month(SampleDate) Between 1 And 3 Then 1
                        When    Month(SampleDate) Between 4 And 6 Then 2
                        When    Month(SampleDate) Between 7 And 9 Then 3
                        Else    4 End)
)

Insert  Blah (SampleDate)
Select  '2012-05-06'
Union   All
Select  '2012-05-20'
Union   All
Select  '2012-06-03'
Union   All
Select  '2012-07-01'
Union   All
Select  '2012-08-12'
Union   All
Select  '2012-09-09'
Union   All
Select  '2012-10-07'
Union   All
Select  '2012-11-04'
Union   All
Select  '2012-12-16'
Union   All
Select  '2013-01-13'
Union   All
Select  '2013-01-27'

Select  *, 
        Dense_Rank() Over (Order By Year(SampleDate),Quarters) As Tracker
From    Blah

答案 1 :(得分:0)

所以你想要一个简单的专栏代表你的实际季度? 您希望使用SQL分区的2012-Q1,2011-Q1,2010-Q1?或者你想要2列?一个要分区,另一个实际表示年份?

想一想,你需要一个柜台吗?难道你不能把另一列设置为年份吗?

所以你会有2列。一个表示季度,另一个表示年度

quarter year
1       2011
1       2012
1       2010