SQL Server 根据另一个表中的条件查找值的总和

vvp1

我有一个由 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在主表中查找与SQL Server中另一个表中的记录匹配的记录

SQL Server 2008 R2:更新与另一个表匹配的表值

如何从SQL Server 2014中的另一个总和值中减去总和值?

比较一个表中2个列值的总和与第二个表SQL Server中另一个列的值

从一个表中选择一个逗号分隔的值,然后使用SQL Server中的“函数”在另一个表中的where条件中使用它

根据SQL Server中另一个列值的条件返回更新的列值

从MS SQL Server 2012中的另一个表获取带有条件的最新行

SQL Server-查找和替换,如果行包含另一个表中的值,则需要将其删除

将具有逗号分隔的varchar值的表与SQL Server中另一个表的ID值联接

更改列的值取决于SQL Server中另一个表的值

SQL Server根据另一个表替换字符串

从另一个表SQL Server更新值

如何在SQL Server中使用另一个表上的值的条件来更新表中的值

根据与另一个SQL Server表的匹配更新列中的所有条目

视图中具有静态值的另一个表中的SQL Server列

SQL Server 2008-用另一个表中的值替换列中的文本值

如果(插入的)第一个表中的值更大,则SQL Server更新另一个表中的值

SQL Server将分隔的值批量插入单列中,拆分为几列,然后插入另一个表

SQL Server查询以另一个表值更新一个表列值

SQL Server 2008 R2:根据另一个表的值计算表的列

联接中另一个表中的引用表名列 - SQL Server

将一个表中的值插入到 SQL Server 中的另一个表中

根据 vb.net 中另一个 SQL Server 表中显示的行显示列

如何根据 SQL Server 中的另一个表列值限制插入到表?

SQL Server - 从一个表插入到另一个值不为空的表

SQL如何根据另一个表中满足的条件显示列值

MS SQL Server - 如果匹配另一个视图中列中的多个条件,则更新表行

如果值不在另一个表中,如何防止插入 SQL Server 表?

从一个表与另一个表中查找匹配的人(MS SQL Server)