我有下表:
oGroup oDate oValue
--------------------------------
A 2014-01-01 10
A 2014-01-02 20
A 2014-02-01 10
A 2014-02-02 10
A 2014-03-01 10
A 2014-04-01 30
A 2014-05-01 10
B 2014-01-01 5
然后我有以下存储过程:
CREATE PROCEDURE _spTest
(@oMonth int, @oYear int)
AS
BEGIN
SELECT
oGroup, oDate, oValue
FROM
oTable
WHERE
DATEPART(MONTH, oDate) = @oMonth
AND DATEPART(YEAR, oDate) = @oYear
END
因此,如果我为@oMonth = 4和@oYear = 2014设置参数。那么所有包含第4个月(4月)和2014年的记录都将显示为结果。
我的问题是:我想知道从年初开始的'oValue'总数,直到与上面存储过程相同参数的给定值。我怎样才能做到这一点?
例如,如果@oMonth是4,而@oYear是2014.那么结果应该是2014年1月SUM
的{{1}} + oValue
SUM
2014年2月+ 2014年3月oValue
SUM
+ 2014年4月oValue
SUM
结果应该是这样的:
oValue
谢谢。
答案 0 :(得分:1)
使用Between
运算符过滤从当前年份开始的记录。使用Sum aggregate
查找ovalue
create table #test( oGroup char(1), oDate date, oValue int)
insert #test values
('A' ,'2014-01-01' , 10),
('A' ,'2014-01-02' , 20),
('A' ,'2014-02-01' , 10),
('A' ,'2014-02-02' , 10),
('A' ,'2014-03-01' , 10),
('A' ,'2014-04-01' , 30),
('A' ,'2014-05-01' , 10),
('B' ,'2014-01-01' , 5)
DECLARE @oMonth INT=4,
@oYear INT=2014
SELECT oGroup,
Sum(oValue) Total
FROM #test
WHERE Datepart(MONTH, oDate) BETWEEN 1 AND @oMonth
AND Datepart(YEAR, oDate) = @oYear
GROUP BY oGroup,
Year(odate)
输出
oGroup Total
------ -----
A 90
B 5
答案 1 :(得分:0)
你的意思是这样吗?
CREATE PROCEDURE _spTest
(@oMonth int, @oYear int)
AS
BEGIN
SELECT
oGroup
, max(oDate)
, sum(oValue)
FROM
oTable
WHERE
DATEPART(MONTH, oDate) <= @oMonth
AND DATEPART(YEAR, oDate) = @oYear
GROUP BY
oGroup
END
(不确定您是否希望它按oGroup
分组,或者您想要对oDate
列进行分组)