SQL for-each循环替代

时间:2012-01-24 18:23:21

标签: sql

我有两张桌子(让我们称之为TradingWindows和VolumeData)。每一行TradingWindows都有一个startBin和endBin用于每个不同的股票。在VolumeData中,有stock stock,binIndex,volume。

我想通过执行以下操作来组合此信息:for-TradingWindows表中的每一行我想要总结所有的卷binIndex是> startBin和< endBin。 (想法是获得开始和结束之间的总量。)

现在,来自程序编程背景,这很容易(只需编写for-each循环)。我知道这在SQL中是可行的,但我是新的,并且想知道是否有更有效的方法来实现它。

谢谢!

1 个答案:

答案 0 :(得分:5)

我正在对你的桌面结构做一些猜测,但我认为你正在寻找这样的东西:

Select VD.stock, Sum(volume)
From VolumeData VD
    Inner Join TradingWindows TW On VD.stock = TW.stock
Where VD.binIndex Between TW.startBin And TW.endBin
Group By VD.stock

这会将您的VolumeData行与您的TradingWindow行(按库存)匹配,过滤掉不在您范围内的VolumeData行,并按库存将它们组合在一起。

编辑:这是一个非包容性版本(正如JNK所指出的,BETWEEN将包括startBin和endBin):

 Select VD.stock, Sum(volume)
    From VolumeData VD
        Inner Join TradingWindows TW On VD.stock = TW.stock
    Where VD.binIndex > TW.startBin And VD.binIndex < TW.endBin
    Group By VD.stock