dポイントプレゼントキャンペーン実施中!

環境はoracle9iです。

■テーブルの構成
|年度|月|部署コード|商品コード|金額|

■テーブルの内容
|2010|01|AAA|001|1000|
|2010|02|AAA|001|2000|
|2010|01|AAA|001|3000|
|2010|01|AAA|002|3000|
|2010|02|BBB|003|4000|
|2010|01|CCC|001|5000|
|2010|03|CCC|001|6000|

上記のようなテーブルがあり、
これを年度,月,部署コード,商品コードでサマリした値を表示したいです。
と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、
そこに年度,部署コード,商品コードでサマリした
「累計金額」列を加える必要があります。(イメージは下記のとおりです。)


■抽出結果の構成
|年度|月|部署コード|商品コード|金額|累計金額|

■抽出結果の内容
|2010|01|AAA|001|4000|6000|
|2010|02|AAA|001|2000|6000|
|2010|02|BBB|003|4000|4000|
|2010|01|CCC|001|5000|11000|
|2010|03|CCC|001|6000|11000|


GROUP BYと別の集計単位で列を作ることが可能か、
可能であればどのようなSQLを書くべきか、
というところを教えてください。

A 回答 (3件)

TESTしてませんが。



--SQL*PlusをSpoolする場合のおまじない
set linesize 30000
set heading off
set pagesize 0
set trimspool on
set colsep |

--SQL本体
select a.年度, a.月, a.部署コード, a.商品コード, a.金額, b.累計金額
from
  (
    select 年度, 月, 部署コード, 商品コード, sum(金額) 金額
    from テーブル
    group by 年度, 月, 部署コード, 商品コード
  ) a,
  (
    select 年度, 部署コード, 商品コード, sum(金額) 累計金額
    from テーブル
    group by 年度, 部署コード, 商品コード
  ) b
where a.年度= b.年度
and a.部署コード = b.部署コード
and a.商品コード = b.商品コード
order by a.年度, a.月, a.部署コード, a.商品コード
;
    • good
    • 0
この回答へのお礼

ありがとうございます。

環境が無いのですぐには試せませんが、
この方法か、No2の方が書いてくださった
分析関数を使う方法のどちらかでいけそうですね。

非常に助かりました。

お礼日時:2011/03/24 06:30

Yahoo!知恵袋の方でも同じ質問をし、既に回答ももらっているようですが。

。。

「累計」ではなく、「『年度+部署コード』毎の合計を、各行にくっつけるだけ」のように見えますが?
そうであれば、サブクエリでの集計結果をジョインするだけです。

本当にいわゆる「累計させていく」なら、Oracleであれば既に分析関数が実装されてういるバージョンだと思いますが?
    • good
    • 0
この回答へのお礼

知恵袋で投稿した時間にyahooのサーバエラーが発生していて、
「ページが見つかりません。」エラーが質問時と回答時に表示されていたため、
緊急性が高い質問なのでこちらで別途質問しました。
重複質問の」ようになってしまい申し訳ございません。

お礼日時:2011/03/24 06:27

環境が無いので試してません。

あしからず。

SELECT 年度, 月, 部署コード, 商品コード, SUM(金額) AS 合計金額, SUM(SUM(金額)) OVER(PARTITION BY 年度, 部署コード, 商品コード) AS 累計金額
FROM テーブル
GROUP BY 年度, 月, 部署コード, 商品コード
ORDER BY 年度, 部署コード, 商品コード, 月
    • good
    • 0
この回答へのお礼

ありがとうございます。

環境が無いのですぐには試せませんが、
この方法か、No1の方が書いてくださった
サマリと結合する方法のどちらかでいけそうですね。

非常に助かりました。

お礼日時:2011/03/24 06:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す