我假设您希望它是动态的而不是固定的值(以允许修改数据并显示正确的值)。下面的示例显示了我将如何在 SELECT 查询中执行此操作(不修改基础数据);
测试数据(# = 临时表)
CREATE TABLE #TestTable (Units int, Date_Field datetime, Master_ID int)
INSERT INTO #TestTable (Units, Date_Field, Master_ID)
VALUES
(10,'2016-07-06',1)
,(20,'2016-08-06',1)
,(30,'2016-09-06',1)
,(40,'2016-10-06',1)
,(50,'2016-11-06',1)
,(60,'2016-12-06',1)
,(70,'2016-10-06',2)
,(80,'2016-11-06',2)
,(90,'2016-12-06',2)
询问
SELECT
tt.Master_ID
,tt.Date_Field
,tt.Units
,SUM(tt2.Units) Sum_Units
FROM #TestTable tt
LEFT JOIN #TestTable tt2
ON tt2.Date_Field BETWEEN DATEADD(m,-3,tt.Date_Field) AND tt.Date_Field
AND tt.Master_ID = tt2.Master_ID
GROUP BY tt.Master_ID, tt.Date_Field, tt.Units
ORDER BY tt.Master_ID, tt.Date_Field
输出
Master_ID Date_Field Units Sum_Units
1 2016-07-06 00:00:00.000 10 10
1 2016-08-06 00:00:00.000 20 30
1 2016-09-06 00:00:00.000 30 60
1 2016-10-06 00:00:00.000 40 90
1 2016-11-06 00:00:00.000 50 120
1 2016-12-06 00:00:00.000 60 150
2 2016-10-06 00:00:00.000 70 70
2 2016-11-06 00:00:00.000 80 150
2 2016-12-06 00:00:00.000 90 240
这里的逻辑是,您将加入到日期范围为 -3 个月的同一张表中(对于本示例),以提供您的运行总计。
这样做会更容易,而不是尝试将数据保存在计算列中(这将是我的另一种方法),因为您只需在提取数据时运行一次。每次将任何数据放入此表时,计算列都必须进行计算。