我有这个加入:
UPDATE Table_Name
SET Change = isnull(tab2.Value,0) - tab1.Value
FROM
(SELECT Date,ID,ID,FileName,Value FROM Table_Name WHERE FileName = 'x' AND Date = '2012-05-17') tab1
LEFT OUTER JOIN
(SELECT Date,ID,TradeID,FileName,Value FROM Table_Name WHERE FileName = 'x' AND Date = '2012-05-18') tab2
ON tab1.FileName = tab2.FileName AND
tab1.ID = tab2.ID AND
tab1.ID = tab2.ID
如您所见,它是一个左外连接。但是,当我有 5 月 17 日的数据而 5 月 18 日没有数据时,插入的值应该是 -17th.Value(因为一般计算是 18th.Value - 17th.Value 和 18th.Value 为零)。
如果我在插入部分(用于调试)下方放置一个选择语句,则显示正确,但是,当我删除 SELECT 语句并在 SET 部分中进行计算时,它不起作用。我最终得到了 Change of null 的值,其中找不到 5 月 18 日的匹配项。
编辑:我应该补充一点,我不确定我是否需要 LEFT JOIN 或 LEFT OUTER JOIN。我希望从 tab1 返回所有行,如果它在 tab2 中不存在,则更改值应该是 -tab1.Value,而不是 tab2.Value - tab1.Value。