我有一个由 ID、Year、Value 组成的表
---------------------------------------
| ID | Year | Value |
---------------------------------------
| 1 | 2006 | 100 |
| 1 | 2007 | 200 |
| 1 | 2008 | 150 |
| 1 | 2009 | 250 |
| 2 | 2005 | 50 |
| 2 | 2006 | 75 |
| 2 | 2007 | 65 |
---------------------------------------
然后我创建一个派生的聚合表,其中包含 ID、MinYear 和 MaxYear
---------------------------------------
| ID | MinYear | MaxYear |
---------------------------------------
| 1 | 2006 | 2009 |
| 2 | 2005 | 2007 |
---------------------------------------
然后我想在聚合表中找到 MinYear 和 MaxYear foreach ID 之间的值总和,但我无法确定正确的查询。
决赛桌应该是这样的
----------------------------------------------------
| ID | MinYear | MaxYear | SumVal |
----------------------------------------------------
| 1 | 2006 | 2009 | 700 |
| 2 | 2005 | 2007 | 190 |
----------------------------------------------------
现在我可以执行所有连接来创建第二个表。但随后我使用快进游标遍历第二个表的每条记录,for 循环中的代码如下所示
DECLARE @curMin int
DECLARE @curMax int
DECLARE @curID int
FETCH Next FROM fastCursor INTo @curISIN, @curMin , @curMax
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT Sum(Value) FROM ValTable WHERE Year >= @curMin and Year <= @curMax and ID = @curID
Group By ID
FETCH Next FROM fastCursor INTo @curISIN, @curMin , @curMax
找到指定年份之间的值总和后,我可以将其连接回第二个表,然后得出所需的结果(第三个表)。
然而,实际上第二个表大约有 400 万行,所以这个迭代非常耗时(大约每分钟生成 300 个结果)并且可能不是最好的解决方案。
我的问题是,有没有办法生成第三个表的结果而不必使用游标/for 循环?
您可以使用查询,因为下面的 TableA 是您的第一个表,而 TableB 是第二个
SELECT *,
(select SUM(Value) FROM TableA where tablea.ID=TableB.ID AND tableA.Year BETWEEN
TableB.MinYear AND TableB.MaxYear) AS SumValue
from TableB
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句