2017-02-07 4 views
1

Я хотел бы обновить столбец в таблице, используя другой столбец, исходящий из инструкции select. Это то, что я пытаюсь:Операция обновления SQL от 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]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

Кажется, кажется довольно понятным, может добавить «TOP 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

Ваше обновление для обновления записей с одним значением. Ваш запрос возвращает более одного результата. Вам нужно уточнить свой выбор, чтобы вернуть только одну строку. Поскольку для этого кода сотрудника доступно много записей транс, вы можете использовать функцию Top или window, чтобы получить противораковую запись или выполнить агрегацию. Если вы опубликуете немного больше подробностей о том, чего вы пытаетесь достичь, вы можете получить некоторую помощь в синтаксисе.

Смежные вопросы