我有桌子,我想要这样的结果:
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
这段代码给了我想要的东西,但是对于大量记录来说需要很长时间,例如一百万条记录。执行
需要两分多钟最好的方法是什么?
答案 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