使用SELECT语句中的计算值更新空列?

时间:2012-05-21 14:42:28

标签: sql sql-server

我有一个表,6列,第6列是空的,但其他5列有数据。我使用第4和第5列来计算值,然后我希望将此值插入第6列。

这是我到目前为止所做的:

UPDATE Table_Name 
SET Change = tab3.Difference
FROM
    (SELECT COBDate, FileName, ID, ScenarioID FROM Table_Name WHERE COBDate = '2012-05-18' AND FileName = 'GBP.csv') tab0
INNER JOIN
    (SELECT  tab1.ID, tab1.ScenarioID,tab1.COBDate, tab1.FileName, Val1 - Val2 AS Difference FROM
        (SELECT COBDate, FileName, ScenarioID, ID, CASE WHEN Value IS NULL THEN 0 ELSE Value END AS Val1 FROM Table_Name WHERE COBDate = '2012-05-18' AND FileName = 'GBP.csv') tab1
    JOIN
        (SELECT COBDate, FileName, ScenarioID, ID, CASE WHEN Value IS NULL THEN 0 ELSE Value END AS Val2  FROM Table_Name WHERE COBDate = '2012-05-17' AND FileName = 'GBP.csv') tab2
    ON tab1.ScenarioID = tab2.ScenarioID AND tab1.ID = tab2.ID) tab3
ON tab0.COBDate = tab3.COBDate
AND tab0.FileName = tab3.FileName
AND tab0.ID = tab3.ID
AND tab0.ScenarioID = tab3.ScenarioID

编辑:上面的代码没有奏效。无论主键如何,它都为每一行设置了相同的值....

2 个答案:

答案 0 :(得分:1)

这会解决您的问题吗?

UPDATE Table_Name SET Column6 = Column4 + Column5

要获取正确的行,请使用WHERE语句。

答案 1 :(得分:0)

重写您的语句,使from语句直接引用您正在更新的表。例如,使用where子句删除第一个子选择,类似于:

UPDATE Table_Name
SET Change = tab3.Difference 
FROM Table_Name tab0

    INNER JOIN     

    (SELECT  tab1.ID, tab1.ScenarioID,tab1.COBDate, tab1.FileName, Val1 - Val2 AS Difference 
        FROM
            (SELECT COBDate, FileName, ScenarioID, ID, CASE WHEN Value IS NULL THEN 0 ELSE Value END AS Val1 
            FROM Table_Name 
            WHERE COBDate = '2012-05-18' AND FileName = 'GBP.csv'
        ) tab1     
        JOIN         
            (SELECT COBDate, FileName, ScenarioID, ID, CASE WHEN Value IS NULL THEN 0 ELSE Value END AS Val2  
            FROM Table_Name 
            WHERE COBDate = '2012-05-17' AND FileName = 'GBP.csv'
        ) tab2 ON 
                tab1.ScenarioID = tab2.ScenarioID 
                AND tab1.ID = tab2.ID
    ) tab3 ON 

    tab0.COBDate = tab3.COBDate 
    AND tab0.FileName = tab3.FileName 
    AND tab0.ID = tab3.ID 
    AND tab0.ScenarioID = tab3.ScenarioID 

WHERE tab0.COBDate = '2012-05-18'
    and tab0.FileName = 'GBP.csv'