我如何使用CURSOR迭代值列表来为每个值进行计算?

时间:2016-02-08 16:54:47

标签: sql sql-server cursor

我搜索并搜索了一种方法来做我想做的事情,但我还没有找到解决方案。我把日期存储在一个表中,如下所示:

Dates      Code    Sum
1-15-2015  AAA     (to be calculated)
2-2-2016   BBB     (to be calculated)
11-23-2015 CCC     (to be calculated)

表中每条记录的sum是根据Date列中的日期计算的。我想使用Date列中的日期作为排序参数来对表中的每条记录进行计算。我假设CURSOR是最好的方法,但我是SQL的新手,我不知道如何实现这样的功能。例如,你可以完全弥补总和计算。无论如何,它是微不足道的。我在其他地方看过几个例子,但我没有运气。任何帮助是极大的赞赏。

总和计算

通过在日期范围内通过传递查询从另一个数据库中提取值来计算总和。日期范围由示例表的Dates列中的日期确定。日期范围是今天Dates列中的日期值(GetDate())。我需要知道的是将示例表中每条记录的左侧日期更改为Dates列中的日期。效率是关键。

1 个答案:

答案 0 :(得分:0)

我的回答非常通用,但您需要OUTER APPLYCROSS APPLY,具体取决于您是否要过滤NULL值。< / p>

语法看起来与此类似:

Select  A.Dates, A.Code, X.Sum
From    YourTable   A
Outer Apply
(
    Select  Sum(B.StuffToSum)   As  Sum
    From    OtherDatabase.OtherSchema.OtherTable    B
    Where   B.Date Between A.Dates And GetDate()
) X

您的OUTER APPLY逻辑应与您正在使用的实际逻辑相匹配,我只是以此为例说明如何从第一个表中的Date获取日期范围到{ {1}}。

使用GETDATE(),如果您的其他表格中没有属于该日期范围的值,则会返回OUTER APPLY。对于NULL,整个记录将被过滤掉(此行为类似于CROSS APPLYINNER)。