2017-02-07 14 views
1

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

これはかなりわかりやすいようですが、 'EmployeeCode'が一意ではないと思われるように、内部選択に 'TOP 1 'を追加する可能性がありますか? –

答えて

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

あなたのアップデート単一の値でレコードを更新するように設定されています。クエリで複数の結果が返されます。選択を絞り込んで1行だけを返す必要があります。その従業員コードには多くのトランスレコードが用意されているため、Topまたはウィンドウ関数を使用して抗癌レコードを取得したり、集計を実行することができます。あなたが達成しようとしているものについてもう少し詳細を投稿すれば、その構文に関する助けを得ることができます。

関連する問題