select的SQL更新语句

时间:2017-02-07 12:47:32

标签: sql-server

我想使用来自select语句的另一列更新表中的列。这就是我正在尝试的:

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]子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。   01000 - [SQL Server]语句已终止。

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分:0)

您的更新设置为使用单个值更新记录。您的查询返回多个结果。您需要优化您的选择以仅返回一行。由于许多trans记录可用于该员工代码,因此您可以使用Top或window函数来获取抗癌记录或执行聚合。如果你发布一些关于你想要实现的内容的更多细节,你可以获得一些语法帮助。