Sql server 2008 r2 按年划分
我有一张这样的年表。每年有Sql server 2008 r2 按年划分,sql-server-2008-r2,Sql Server 2008 R2,我有一张这样的年表。每年有12个值(固定) 我想输出为 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
12个值(固定)
我想输出为
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
如何在SQLServer2008R2中执行此操作。我尝试过使用DenseRank、RowNuber和Partitioned,但都没有成功。我建议动态填充一个表,其中包含从2013年12月到您喜欢的年份的日期值(您可以更改@COUNT_Y变量以添加更多年份)
SQL有一些有趣的datetime函数,比如DATEPART,它可以告诉你一个月的哪个季度
**由于问题更改,答案已更改**
DECLARE @DATES TABLE
(
xDATE DATETIME
)
DECLARE @STARTDATE DATETIME = '12-31-2013'
DECLARE @COUNT_X INT = 0
DECLARE @COUNT_X_MAX INT = 11
DECLARE @COUNT_Y INT = 0
DECLARE @COUNT_Y_MAX INT = 2
WHILE (@COUNT_Y <= @COUNT_Y_MAX)
BEGIN
SET @COUNT_X = 0
WHILE (@COUNT_X <= @COUNT_X_MAX)
BEGIN
INSERT INTO @DATES
SELECT DATEADD(MONTH, -@COUNT_X, DATEADD(YEAR,-@COUNT_Y, @STARTDATE))
SET @COUNT_X = @COUNT_X + 1
END
SET @COUNT_Y = @COUNT_Y + 1
END
SELECT * FROM
(SELECT
DATEPART(YEAR, D.xDATE) AS [YEAR],
DATEPART(MONTH, D.xDATE) AS [MONTH],
DATENAME(MONTH, D.xDATE) AS [MONTH_NAME],
DATEPART(QUARTER, D.xDATE) AS [QUARTER],
DATEPART(MONTH, D.xDATE) - (3 * (DATEPART(QUARTER, D.xDATE) - 1)) AS [QTP]
FROM @DATES D) t
ORDER BY T.YEAR, T.MONTH
DECLARE@DATES表
(
xDATE日期时间
)
声明@STARTDATE DATETIME='12-31-2013'
声明@COUNT_X INT=0
声明@COUNT\u X\u MAX INT=11
声明@COUNT_Y INT=0
声明@COUNT_Y_MAX INT=2
而(@COUNT_YTru使用:
--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)
这是我的会计表,其中Fyear是一个会计年度。我有12个值,每个值表示月份。+1您的解决方案非常好,但我认为我的问题可以使用函数解决(我以前从未听说过)正如阿迪蒂亚所建议的那样,我将投票表决。因此,我将把阿迪蒂亚的回答作为我的回答。
。继续做好工作。
--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)