我的头衔令人困惑,但我无法用其他方式来描述它。
我有一个视图,根据某些标准给我一行。使用此视图,我想过滤另一个表,其中记录日期必须等于或大于视图中的值。之后,我需要对该表的所有记录求和,并减去视图中的一列。
一个例子:
查看
==========================
Item | Value | LastDate
==========================
A 10 2017-02-01
B 5 2017-02-03
C 0 NULL
--------------------------
记录表格:
==========================
Item | Value | Date
==========================
A 20 2017-01-01
A -5 2017-02-04
A 5 2017-02-03
A 10 2017-02-04
B 5 2017-01-01
B 5 2017-02-21
B 5 2017-02-22
B 10 2017-02-23
--------------------------
期望的结果
=======================================
Item | Value | LastDate | RecordsSum
=======================================
A 10 2017-02-01 10
B 5 2017-02-03 20
C 0 NULL NULL
---------------------------------------
我尝试使用Fabiano's方法,但是当我只想要总和时,我得到记录表数据。
我可以使用另一个视图来计算值并将其连接到第一个视图之后,但是这种方法会对数据库进行两次查询,从而使其效率低,因为它将针对> 1000k记录运行。
我知道我可能需要使用CTE,但我无法使其正常工作。
提前感谢您的帮助。
答案 0 :(得分:2)
这样的事情怎么样?
select v.Item
, v.Value
, v.LastDate
, SUM(r.Value) as RecordsSum
from View v
join Record r on r.Item = v.Item
and r.Date > v.LastDate
group by v.Item
, v.Value
, v.LastDate
答案 1 :(得分:0)
您似乎只需要在视图的所有列中添加一个附加列:
SELECT Item, Value, [Date],
(SELECT SUM(Value)
FROM MyTable
WHERE MyTable.Item = MyView.Item
AND MyTable.Date > MyView.Date) AS RecordsSum
FROM MyView