2013-02-06 7 views
16
UPDATE [asgdb01].[dbo].[info] 
SET [FM] = SUM(a.[PAZARTESI] - b.[KOTA]) 
FROM [asgdb01].[dbo].[info] a, [asgdb01].[dbo].[kota] b 
WHERE a.[WORK_TYPE]='IN' AND a.[NAME]='ALP' 

UPDATE文のセットリストには表示されない場合がありますか?集計は、私はこれを実行すると、私は次のエラーを取得する

+2

実際にそのデカルト積をしたいですか?また、どのRDBMSを使用していますか? – Lamak

+0

私はmssqlを使っています。私は、異なるテーブルから来るpazartesiとkotaの間の差し引きをしたいと思います。 –

+2

私はあなたが2つの異なるテーブルを使いたいと思いますが、それらの間に 'JOIN'条件を使用していないことを知っていますか? – Lamak

答えて

27

私が推測しているように(他の人が指摘しているように)あなたは本当にこのアップデートのデカルトを望んでいないので、クエリに "id"を追加しましたので、いくつか修正する必要がありますが、右パス上で

;with temp as (
    select a.id, SUM(a.pazartesi - b.kota) as newTotal 
    from [asgdb01].[dbo].[info] a join [asgdb01].[dbo].[kota] b 
      on a.id = b.id 
    where a.work_type='in' and a.name='alp') 
update a 
set  fm = t.newTotal 
from [asgdb01].[dbo].[info] a join temp t on a.id = t.id 
+0

私はtempでIDでグループ化しなければなりませんでした。ファンタスティックな答え。 –

+0

+1 [CTEs](https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql)とは対照的に、エレガントで優れたパフォーマンスのソリューションです[CROSS]またはインラインサブクエリを使用している[多数](https://stackoverflow.com/questions/25937315/)その他の方法 – dakab

関連する問題