
No.3ベストアンサー
- 回答日時:
これじゃないですか?
SUM() over 〜 といったウインドウ関数は、元の行をまとめたりしません。
この例では、 キー,年月 が同じ行が複数あれば、その行数だけ同じ行が存在します。
それを結合させれば、 テーブルの1行に対して、Aの複数行で更新しようとしてエラーになります。
テーブル
001 201804 10,000 5,000 10,000 5,000
001 201804 20,000 6,000 10,000 5,000
だったら
A
001 201804 30,000 11,000
001 201804 30,000 11,000
になって、
テーブル1行目 + A1行目
テーブル1行目 + A2行目
テーブル2行目 + A1行目
テーブル2行目 + A2行目
この場合だったら、ウィンドウ関数ではなく、集約関数(GROUP BYでまとめる)のSUMを使えばいいのでは。
個人としては、テーブルの設計からやりなおしだと思います。
回答遅くなり申し訳ありません。
おそらくテーブルAは並び順が不規則の為、更新できなかったのだと思われます。(テーブルBはソート済み)
ご教授いただいたようにGROUP BYでまとめ、問題なく更新しました。
ありがとうございました。

No.2
- 回答日時:
テーブルにどんなデータが入っているのか?
SELECT キー, 年月, COUNT(*) AS 件数
FROM テーブル
GROUP BY キー, 年月
HAVING COUNT(*) > 1;
でどんな結果になりますか?
Bテーブル と Aテーブル の結果を教えてください。
回答遅くなり申し訳ありません。
おそらくテーブルAは並び順が不規則の為、更新できなかったのだと思われます。(テーブルBはソート済み)
GROUP BYでまとめ、問題なく更新しました。
知恵を出していただきありがとうございました。

No.1
- 回答日時:
>更新されずに
エラーメッセージは出ないのですか?
別解)
UPDATE テーブル
SET 累計金額1 = (SELECT SUM(A.金額1) OVER(ORDER BY A.年月 ROWS UNBOUNDED PRECEDING)
FROM テーブル AS A WHERE テーブル.キー = A.キー AND テーブル.年月 = A.年月)
, 累計金額2 = (SELECT SUM(A.金額2) OVER(ORDER BY A.年月 ROWS UNBOUNDED PRECEDING)
FROM テーブル AS A WHERE テーブル.キー = A.キー AND テーブル.年月 = A.年月);
でどうかな。
いつも回答いただきありがとうございます。
正常終了扱いなのかエラーメッセージは出ませんでした。(結果が出力され、累計金額は変化なしという状態)
また、別解実行させていただきましたが、以下エラーが出てしまいました。
↓
'サブクエリは複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後に続く場合や、サブクエリが 1 つの式として使われる場合は複数の値は許可されません。'
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
ACCESSのSQLで、NULLかNULLでな...
-
更新クエリでキー違反
-
アクセス 日付抽出(年月のみ)...
-
違いを教えてください
-
sqlserverでUPDATEできません
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
seoについておしえてください
-
ACCESS2007 フォーム 「バリア...
-
エクスポート時の改行コードに...
-
Access 削除クエリが重い
-
SELECT時の行ロックの必要性に...
-
SELECT文でのデッドロックに対...
-
ビューで引数を使いたい
-
Access VBA Me.Requery レコー...
-
PL/SQLでFROM句に変数を使いたい
-
IFで条件を分岐させてのINSERT...
-
既に使用されているので、使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
ACCESSで複数テーブルを結合し...
-
アクセス 日付抽出(年月のみ)...
-
更新クエリでキー違反
-
違いを教えてください
-
sqlplusでバックスペースが効か...
-
sqlserverで同一キー単位で金額...
-
シャープレジスター エラーコード
-
Access2000へのインポートエラー
-
accessでのリンクテーブルの更新
-
男性に質問です。
-
AccessのSQLで、FROM句の構文エ...
-
SQL injectionに対する脆弱性
-
集計処理について
-
プライマリーキーで同じ値をUPD...
-
sqlserverで対象のレコードを削...
-
キーの2文字目を無視してひもづ...
-
アクセス97のクエリーで、年月...
おすすめ情報
補足させていただきます。
実際にながしたUPDATE文は以下です。
【SQL文】
UPDATE テーブル
SET 累計金額1 = A.累計金額1, 累計金額2 = A.累計金額2
FROM (SELECT キー, 年月,
SUM(金額1) OVER(PARTITION BY キー ORDER BY 年月 ROWS UNBOUNDED PRECEDING) AS 累計金額1,
SUM(金額2) OVER(PARTITION BY キー ORDER BY 年月 ROWS UNBOUNDED PRECEDING) AS 累計金額2
FROM テーブル AS A
WHERE テーブル.キー = A.キー AND テーブル.年月 = A.年月;