Sql 如何使用光标在值列表中迭代以计算每个值?
我一直在寻找一种方法来做我想做的事情,但我还没有找到解决办法。我将日期存储在如下表中:Sql 如何使用光标在值列表中迭代以计算每个值?,sql,sql-server,cursor,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) 表中每个记录的总和是根据日期列中的日期计算的。我想使用date列中的日期作为排序参数来计算表中的每条记录。我认为游标是最好的方法,但我对
Dates Code Sum
1-15-2015 AAA (to be calculated)
2-2-2016 BBB (to be calculated)
11-23-2015 CCC (to be calculated)
表中每个记录的总和
是根据日期
列中的日期计算的。我想使用date
列中的日期作为排序参数来计算表中的每条记录。我认为游标是最好的方法,但我对SQL是新手,不知道如何实现这样的功能。例如,你可以完全补足总和计算。不管怎么说,这都是小事。我在其他地方看过几个例子,但我运气不好。非常感谢您的帮助
总和计算
通过传递查询从另一个数据库中提取日期范围内的值来计算总和。日期范围由示例表的
Dates
列中的日期确定。日期范围是从Dates
列中的日期值到今天的日期(GetDate()
)。我只需要知道如何将示例表中每条记录的左日期更改为Dates
列中的日期。效率是关键。我的答案非常笼统,但您需要执行外部应用
或交叉应用
,具体取决于您是否要过滤空值
语法类似于以下内容:
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
逻辑应该与您使用的实际逻辑相匹配,我只是用这个例子来说明如何获得从第一个表中的日期到GETDATE()
的日期范围
使用外部应用
,如果其他表中没有属于该日期范围的值,它将返回NULL
。在交叉应用的情况下
,整个记录将被过滤掉(这种行为类似于内部联接
和外部联接
) 您不需要光标,应该使用交叉应用
或外部应用
作为总和
列。您对Sum
列的逻辑是什么?@Siyual它只是一个基本的Sum(StuffToSum)
聚合函数。如果这有助于你创建一些示例代码,你完全可以弥补它。永远不要认为游标是最好的方法,因为它几乎100%都不是最好的方法。这通常是最糟糕的方法。我不清楚,你不知道该怎么做。