0

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

編集: 上記のコードは機能していません。主キーに関係なく、すべての行に同じ値が設定されています....

4

2 に答える 2

1

これで問題は解決しますか?

UPDATE Table_Name SET Column6 = Column4 + Column5

正しい行を取得するには、WHERE ステートメントを使用します。

于 2012-05-21T14:47:47.093 に答える
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'
于 2012-05-21T14:48:04.703 に答える