这个问题在这里已经有答案了:
在sql select语句中计算会计年度(10个答案)
9个月前关门了。
我有这个表,我写了,创建表查询和示例数据如下:
DECLARE @TCS_DIVIDEND_PER_YEAR TABLE
(RECORD_DATE DATE,
DIVIDENDPERSHARE INT)
INSERT INTO @TCS_DIVIDEND_PER_YEAR values
('07/16/20',5)
,('06/03/20', 6)
,('03/19/20', 12)
,('01/23/20', 5)
,('10/17/19', 5)
,('10/17/19', 40)
,('07/16/19', 5)
,('06/04/19', 18)
,('01/17/19', 4)
,('10/23/18', 4)
,('07/17/18', 4)
,('05/31/18', 29)
,('01/22/18', 7)
,('10/25/17', 7)
,('07/24/17', 7)
,('06/13/17', 27.5)
,('01/23/17', 6.5)
,('10/24/16', 6.5)
,('07/25/16', 6.5)
,('06/06/16', 27)
,('01/21/16', 5.5)
,('10/23/15', 5.5)
,('07/20/15', 5.5)
,('06/05/15', 24)
,('01/27/15', 5)
,('10/29/14', 5)
,('07/28/14', 5)
,('07/28/14', 40)
,('06/06/14', 20)
,('01/27/14', 4)
,('10/25/13', 4)
,('07/29/13', 4)
,('06/06/13', 13)
,('01/23/13', 3)
,('10/31/12', 3)
,('07/23/12', 3)
,('06/07/12', 8)
,('06/07/12', 8)
,('01/25/12', 3)
,('10/25/11', 3)
,('07/28/11', 3)
,('06/08/11', 8)
,('01/27/11', 2)
,('11/01/10', 2)
,('07/29/10', 2)
,('06/15/10', 4)
,('06/15/10', 10)
,('01/27/10', 2)
,('10/28/09', 2)
,('07/27/09', 2)
,('06/16/09', 5)
,('01/28/09', 3)
,('10/29/08', 3)
,('07/31/08', 3)
,('06/18/08', 5)
,('01/23/08', 3)
,('10/22/07', 3)
,('07/27/07', 3)
我想得到 sum(DIVIDENDPERSHARE)
在每个财政年度之间,即3月31日至4月1日,所有记录
例如,2007财年2007年3月31日至2008年4月1日期间的股息总额将为9,这应该对所有记录进行迭代。
以下代码确实有效:
DECLARE @STARTDATE DATE
DECLARE @ENDDATE DATE
SET @STARTDATE = '04/01/2007'
SET @ENDDATE = '03/31/2008'
WHILE YEAR(@ENDDATE) <= YEAR(GETDATE())
BEGIN
SELECT SUM(DIVIDENDPERSHARE) AS DIVIDEND, @STARTDATE AS STARTING_DATE, @ENDDATE AS ENDING_DATE FROM
@TCS_DIVIDEND_PER_YEAR
WHERE RECORD_DATE BETWEEN @STARTDATE AND @ENDDATE
Set @STARTDATE = DATEADD(YYYY,1, @STARTDATE)
SET @ENDDATE = DATEADD(YYYY, 1, @ENDDATE)
IF @@ROWCOUNT = 0
BREAK;
END
输出为
(58 rows affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
9 2007-04-01 2008-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
14 2008-04-01 2009-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
11 2009-04-01 2010-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
20 2010-04-01 2011-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
17 2011-04-01 2012-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
25 2012-04-01 2013-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
25 2013-04-01 2014-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
75 2014-04-01 2015-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
39 2015-04-01 2016-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
45 2016-04-01 2017-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
48 2017-04-01 2018-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
41 2018-04-01 2019-03-31
(1 row affected)
DIVIDEND STARTING_DATE ENDING_DATE
----------- ------------- -----------
85 2019-04-01 2020-03-31
(1 row affected)
有没有其他方法来做这件事,不使用额外的表格,如日历表和给定的信息,如果有请分享我想学习
2条答案
按热度按时间qcbq4gxm1#
你其实不需要日历表。如果会计年度从4月1日开始,您可以减去3个月并提取年度:
这应该比使用日历表快得多。
idv4meu82#
如果您还没有日历表,请创建一个日历表。确保列中有财政年度。然后可以通过一个非常简单的查询来解决这个问题: