按年划分

Luv*_*Luv 2 sql-server-2008-r2

我有这样的年表.每年都有12价值(固定)

declare @t table (FiscalYear int,[Month] varchar(25))
insert into @t values
(2011,'Jan'),(2011,'Feb'),(2011,'Mar'),(2011,'Apr'),
(2011,'May'),(2011,'Jun'),(2011,'Jul'),(2011,'Aug'),
(2011,'Sep'),(2011,'Oct'),(2011,'Nov'),(2011,'Dec'),
(2012,'Jan'),(2012,'Feb'),(2012,'Mar'),(2012,'Apr'),
(2012,'May'),(2012,'Jun'),(2012,'Jul'),(2012,'Aug'),
(2012,'Sep'),(2012,'Oct'),(2012,'Nov'),(2012,'Dec'),
(2013,'Jan'),(2013,'Feb'),(2013,'Mar'),(2013,'Apr'),
(2013,'May'),(2013,'Jun'),(2013,'Jul'),(2013,'Aug'),
(2013,'Sep'),(2013,'Oct'),(2013,'Nov'),(2013,'Dec')
Run Code Online (Sandbox Code Playgroud)

我想输出为

FYear   Month   Qt  Qtp
2011    Jan     1   1
2011    Feb     1   2
2011    Mar     1   3
2011    Apr     2   1
2011    May     2   2
2011    Jun     2   3
2011    Jul     3   1
2011    Aug     3   2
2011    Sep     3   3
2011    Oct     4   1
2011    Nov     4   2
2011    Dec     4   3
2012    Jan     1   1
2012    Feb     1   2
2012    Mar     1   3
2012    Apr     2   1
2012    May     2   2
2012    Jun     2   3
2012    Jul     3   1
2012    Aug     3   2
2012    Sep     3   3
2012    Oct     4   1
2012    Nov     4   2
2012    Dec     4   3
2013    Jan     1   1
2013    Feb     1   2
2013    Mar     1   3
2013    Apr     2   1
2013    May     2   2
2013    Jun     2   3
2013    Jul     3   1
2013    Aug     3   2
2013    Sep     3   3
2013    Oct     4   1
2013    Nov     4   2
2013    Dec     4   3
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点在SQLServer2008R2.我尝试过使用DenseRank,RowNuber,Partitioned但都是徒劳的.

adi*_*dar 5

使用Ntile的 Tru :

--select * from @t      
SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY FYear, Qt ORDER BY FYear ) Qtp   
from
(SELECT FYear,[Month],
NTILE(4) OVER ( PARTITION BY FYear ORDER BY FYear ) AS Qt
FROM @t) PERIOD
ORDER BY FYear ,Qt ,ROW_NUMBER() OVER ( PARTITION BY FYear, Qt ORDER BY FYear)
Run Code Online (Sandbox Code Playgroud)