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で質問しましょう!
似たような質問が見つかりました
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- その他(Microsoft Office) エクセルでテーブルの最終行が自動追加されない 1 2023/01/04 15:09
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
アクセス 日付抽出(年月のみ)...
-
片方のテーブルにないデータを...
-
sqlserverで対象のレコードを削...
-
更新クエリでキー違反
-
MAX値を条件にデータを取得する...
-
sqlplusでバックスペースが効か...
-
ACCESSで複数テーブルを結合し...
-
「マスタ」と「テーブル」の違...
-
エクセルでテーブルの最終行が...
-
ACCESS 一番最新の日付の金額...
-
3つ以上のテーブルをUNIONする...
-
数百万件レコードのdelete
-
accessのロック
-
データの二重表示の原因
-
主キーにインデックスは貼らな...
-
重複するキーから一番古い年月...
-
accessのエクスポートエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
アクセス 日付抽出(年月のみ)...
-
更新クエリでキー違反
-
シャープレジスター エラーコード
-
MAX値を条件にデータを取得する...
-
sqlplusでバックスペースが効か...
-
ACCESSで複数テーブルを結合し...
-
違いを教えてください
-
AccessのSQLで、FROM句の構文エ...
-
sqlserverで対象のレコードを削...
-
片方のテーブルにないデータを...
-
集計処理について
-
access前月差分クエリ書き換え...
-
sqlserverで同一キー単位で金額...
-
レコードの有無をすばやく検索...
-
accessでのリンクテーブルの更新
-
Access2000へのインポートエラー
-
検索キーの設定手法
おすすめ情報
補足させていただきます。
実際にながした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.年月;