基于id的SQL Server和列

时间:2016-11-27 10:45:48

标签: sql-server sum sql-server-2014

我有桌子,我想要这样的结果:

id      ItemId      Quantity   Sum
 1         1            2       2
 2         1            1       3
 3         1            1       4
 4         2            3       3
 4         2            1       4
 5         3            6       6     

其中id是主键,ItemId是外键,Quantity是整数列。

我想要"总和"列总和数量基于itemId。 我曾经使用过group by但它没有给我我想要的东西。随着分组 我得到了这个结果:

id      ItemId      Quantity    Sum
 1         1            2        4
 2         1            1        4
 3         1            1        4
 .         .            .        .
 .         .            .        . 

"总和"所有相关行的列都相同。

我也使用了这段代码:

select it1.id, it1.ItemId, it1.Quantity ,

(select sum(it2.Quantity) from InventoryTransactions it2 where it2.ItemId = it1.ItemId and it2.id <= it1.Id) as Sum

 from InventoryTransactions it1
 order by it1.ItemId , it1.Id

这段代码给了我想要的东西,但是对于大量记录来说需要很长时间,例如一百万条记录。执行

需要两分多钟

最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

在sql server&gt; = 2012中,您可以更轻松地完成滚动操作

select it1.id, it1.ItemId, it1.Quantity,
sum(Quantity) over(partition by itemid order by Id rows unbounded preceding) as Sum
from InventoryTransactions it1
 order by it1.ItemId , it1.Id