2017-02-07 73 views
1

我想使用來自select語句的另一列更新表中的列。這就是我想:來自select的SQL更新語句

UPDATE CostFile 
SET UPrice = (
SELECT 

     (
      dbo.EmployeeDailyTrans.DailyCost 
     ) + (
      dbo.EmployeeDailyTrans.OverTimeHoursCost 
     ) 
    /
     (
      dbo.EmployeeDailyTrans.NumberOfHours 
     ) + (
      dbo.EmployeeDailyTrans.NumberOfOverTimeHours 
     ) 

FROM 
    dbo.EmployeeDailyTrans 
WHERE 
    dbo.EmployeeDailyTrans.EmployeeCode = 'UNE25681' 
)WHERE Code = 'UNE25681' 

,但我得到這個錯誤:

[Err] 21000 - [SQL Server]Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. 01000 - [SQL Server]The statement has been terminated.

+0

您選擇的查詢返回多個行,所以錯誤... – balaji

+0

這看起來似乎很自我解釋,可能會向內部選擇添加一個「頂部1」,因爲它會顯示'EmployeeCode'可能不唯一? –

回答

0

如果我不得不猜測,我猜你想聚集:

UPDATE CostFile 
    SET UPrice = (SELECT (SUM(edt.DailyCost + edt.OverTimeHoursCost)/
          SUM(edt.NumberOfHours + edt.NumberOfOverTimeHours) 
         ) 
        FROM dbo.EmployeeDailyTrans edt 
        WHERE edt.EmployeeCode = CostFile.Code 
       ) 
    WHERE Code = 'UNE25681'; 
0

你更新設置爲使用單個值更新記錄。您的查詢返回多個結果。您需要優化您的選擇以返回一行。由於許多trans記錄可用於該員工代碼,因此您可以使用Top或窗口功能獲取抗癌記錄或執行彙總。如果你發佈一些你想要達到的細節,你可以在語法上得到一些幫助。