こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL2005 ストアドUPDATEについて教えてください。

SQL2005 ストアドUPDATEについて教えてください。

顧客マスタと、売上データがあり、顧客毎の売上データの売上金額の合計を
顧客マスタの累計金額にUPDATEする方法を教えてください。

顧客マスタ・・顧客コード、累計金額
売上データ・・売上日、顧客コード、売上金額


update 顧客マスタ set 累計金額=(select sum(B.売上金額)
from 売データ as B
where 売上日付>='2010/03/01'
and 売上日付<='2010/06/30'
group by B.顧客コード)
from 顧客マスタ as A,売上データ as B
where A.顧客コード=B.顧客コード

サブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や
のエラーが出たり、期間中のすべての顧客の売上合計がセットされたり思うようになりません。

どなたか教えてください。
宜しくお願いします。

投稿日時 - 2010-05-28 14:32:04

QNo.5927920

困ってます

質問者が選んだベストアンサー

何だか随分混乱があるようですが、書かれたクエリは相関サブクエリになっていません。
相関サブクエリによる更新であれば、以下のようになります。

update 顧客マスタ
set 累計金額=(select sum(売上金額)
from 売上データ
where 売上日付 between '2010/03/01' and '2010/06/30'
and 顧客コード=A.顧客コード)
from 顧客マスタ as A
where exists
(select null from 売上データ
where 売上日付 between '2010/03/01' and '2010/06/30'
顧客コード=A.顧客コード)

でも、私はこのような書き方はしません。
SQL Serverの場合は。相関サブクエリではなく、以下のようにJOIN更新で処理する方が多いと思います。

update 顧客マスタ
set 累計金額=B.累計金額
from 顧客マスタ as A
inner join
(select 顧客コード,sum(売上金額) as 累計金額
from 売上データ
where 売上日付 between '2010/03/01' and '2010/06/30'
group by 顧客コード) as B on A.顧客コード=B.顧客コード

投稿日時 - 2010-05-28 19:00:51

お礼

教えて頂いた方法で、求めたい数字が出ました。
大変ありがとうございました。

投稿日時 - 2010-05-29 14:49:21

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問