GROUP BY 句を2つ組み合わせる方法

このQ&Aのポイント
  • GROUP BY 句を2つ組み合わせて、集計の集計を行う方法について教えてください。
  • 対象SQLでは、商品コードを追加して商品コード単位で金額の合計値を取得し、その合計値から営業所単位の金額合計値を求める手法がありますか?
  • 具体的な対象SQLの記述例とともに教えていただけると助かります。
回答を見る
  • ベストアンサー

GROUP BY 句を 2つ組み合わせる方法

【質問】 GROUP BY 句を 2つ組み合わせて、集計の集計を行う方法ってありますか? 下記対象SQLで集計を行うとメインのF_在庫履歴には、商品コードがあり、計算値の金額が 正常に出力されません。 一度、GROUP BY 句に商品コードを追加し、商品コード単位の金額合計値を取得後、 その合計値のSQLから、下記の様に、営業所単位の金額合計値を求める手法はありますでしょうか。 よろしくお願いします。 ●対象SQL SELECT TO_NUMBER(SUBSTR(S.処理対象年月日,1,6)) AS 処理対象年月 , S.内部CD AS 部CD , S.管理営業所CD AS 営業所CD , 631 AS 科目CD , (SUM(S.前月末在庫数) + SUM(S.仕入数) - SUM(S.仕入返品数) + SUM(S.移動入庫数) + SUM(S.調整入庫数) - SUM(S.売上数) + SUM(S.売上返品数) - SUM(S.移動出庫数) - SUM(S.調整出庫数) - SUM(S.仮売上数量) - SUM(S.工事出庫数量)) * MAX(DISTINCT S.在庫原価) * -1 AS 金額 FROM F_在庫履歴 S WHERE S.処理対象年月日 = W処理対象年月日 GROUP BY S.内部CD,S.管理営業所CD, TO_NUMBER(SUBSTR(S.処理対象年月日,1,6));

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5083/13282)
回答No.1

SELECT ・・・ FROM ( SELECT ・・・ FROM hoge GROUP BY 商品コード ) GROUP BY ・・・ って事でしょうか? 一旦必要なデータをSELECTして、それをFROMとして再抽出・集計を掛けることは可能です。

KAZUKAZUBANZAI
質問者

補足

一旦、商品コード単位で集計して、その結果を、営業所単位で集計を行いたいです。 イメージとしては、下記のSQLなんですが・・・・ エラーで通らなく困っています。 SELECT T1.処理対象年月 , T1.部CD , T1.部署名 , T1.営業所CD , T1.営業所名 , T1.並び順 , T1.商品CD , T1.仕訳区分 , T1.科目CD1 , T1.科目CD , T1.科目名 , SUM(T1.金額) , T1.出力FLG ( SELECT TO_NUMBER(SUBSTR(S.処理対象年月日,1,6)) AS 処理対象年月 , M1.内部CD AS 部CD , M3.略式名称 AS 部署名 , S.管理営業所CD AS 営業所CD , M1.略式名称 AS 営業所名 , M1.表示順 AS 並び順 , S.商品CD AS 商品CD , 14 AS 仕訳区分 , 6 AS 科目CD1 , 631 AS 科目CD , '期末商品棚卸高' AS 科目名 , (SUM(S.前月末在庫数) + SUM(S.仕入数) - SUM(S.仕入返品数) + SUM(S.移動入庫数) + SUM(S.調整入庫数) - SUM(S.売上数) + SUM(S.売上返品数) - SUM(S.移動出庫数) - SUM(S.調整出庫数) - SUM(S.仮売上数量) - SUM(S.工事出庫数量)) * MAX(DISTINCT S.在庫原価) * -1 AS 金額 , 0 AS 出力FLG FROM F_在庫履歴 S LEFT JOIN M_名称 M1 ON M1.種別CD = 1 AND M1.対象CD = S.管理営業所CD LEFT JOIN M_名称 M3 ON M3.種別CD = 3 AND M3.対象CD = M1.内部CD WHERE S.処理対象年月日 = 20140331 GROUP BY M1.内部CD, M3.略式名称, S.管理営業所CD, M1.略式名称, M1.表示順, S.商品CD, TO_NUMBER(SUBSTR(S.処理対象年月日,1,6)) ) T1; GROUP BY T1.内部CD, T1.略式名称, T1.管理営業所CD, T1.略式名称, T1.表示順, TO_NUMBER(SUBSTR(S.処理対象年月日,1,6))

関連するQ&A

  • GROUP BY句について

    SQL_PLUSでの質問です。 以下のSELECT句があります。 GROUP BY句の『'A' AS 区分』は必要なのでしょうか。 ----------------------------- SELECT 商品コード AS 商品コード, 商品名 AS 商品名, 'A' AS 区分, SUM(金額) AS 金額 FROM 売上トラン GROUP BY 商品コード AS 商品コード, 商品名 AS 商品名, 'A' AS 区分; ----------------------------- 何気なくプログラムを見ていたら、目に留まりました。 このままでもコンパイルは通るので問題はないのですが、 決まった値を設定しているのだから、必要ないような気がするのです。 環境はWin2000 Oracle 9i です。 ご存知の方、教えて下さい。

  • 現在庫算出方法についてお教え下さい

    在庫管理についてお教え下さい 私の行なっている現在庫の算出方法が妥当かどうか御教え頂けないでしょうか? 在庫管理を会社で行なっています。小さい会社なので、商品もそれほどあるわけではありません。 入庫したら以下の方法で入庫処理しています。 ハンディターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQL5で管理。 テーブルは、 T_入庫マスター 商品コード,入庫数 出庫したら以下の方法で出庫処理しています。 ハンディーターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQLで管理。 テーブルは、 T_出庫マスター 商品コード,出庫数 さらにビューを2つ作っています。 V_入庫マスター select 商品コード,sum(入庫数) As 入庫数 from T_入庫マスター group by 商品コード V_出庫マスター select 商品コード,sum(出庫数) As 出庫数 from T_出庫マスター group by 商品コード 現在庫を求めるには、全ての入庫から全ての出庫を引いたものが現在庫になるはずなので、もう一つビューを作ります。 V_現在庫マスター select V_入庫マスター.商品コード,V_入庫マスター.入庫数 - V_出庫マスター.出庫数 As 現在庫 from V_入庫マスター inner join V_入庫マスター.商品コード = V_出庫マスター.商品コード まだ作り始めて間もないのですが(今まではExcelで在庫管理してました)、果たして現在を求めるのにこのようなやりかたで良いのかどうか不安になりました。 このやり方がスマートかどうか教えて頂けませんでしょうか? 毎日の入出庫は、取扱点数50点。入庫、出庫はマチマチですが各商品10前後です。 よろしくお願いいたします。

  • GROUP BYの記述方法について

    GROUP BYの記述方法について教えてください --------------------- 受注データ(テーブル) --------------------- 品目CD 受注数 00001  10 00001  10 00002  20 00002  15 --------------------- 品目マスタ(テーブル) --------------------- 品目CD 品目名 00001  えんぴつ 00002  けしごむ 00003  色鉛筆 上記二つのDBから、品目ごとの受注数の合計を取得するときのSQL文として、どうするのが正しいのでしょうか? --------------------- 欲しい結果 --------------------- 品目CD 品目名  受注数 00001 えんぴつ 20 00002 けしごむ 35 (考えられるSQL) CASE1:受注データの品目CDと品目マスタの品目名のグループ化 SELECT A.品目CD, B.品目名, SUM(A.受注数) FROM 受注データ A, 品目マスタ B WHERE A.品目CD = B.品目CD GROUP BY A.品目CD, B.品目名 CASE2:受注データをグループ化した結果と品目マスタを結合 SELECT X.品目CD, X.受注数合計, Y.品目名 FROM  (SELECT 品目CD, SUM(受注数)   FROM 受注データ   GROUP BY 品目CD)X,品目マスタ Y WHERE X.品目CD = Y.品目CD CASE3:品目マスタの品目CDと品目名のグループ化 SELECT B.品目CD, B.品目名, SUM(A.受注数) FROM 受注データ A, 品目マスタ B WHERE A.品目CD = B.品目CD GROUP BY B.品目CD, B.品目名 レスポンスも含めて教えてください。 よろしく、お願いします。

  • ASで指定した項目名をGROUP BYやORDER BYで使用する方法。

    ただいまSQLの勉強をしています。 タイトルどおりなのですが、ASで指定した項目名をGROUP BYやORDER BYで使用する方法はあるのでしょうか? CASE文を使用したこちらのSQL文↓で、SELECT文、GROUP BY句、ORDER BY句の中に重複する部分が多く出てしまうのでどうにかすっきりさせたいと思い、独自に調べたり色々と試したのですがわからず、質問させていただきました。 お分かりになる方、いらっしゃいましたらご助言どうぞよろしくお願いいたします。 <SQL文> SELECT CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END AS グループ名称 , sum(suryo) AS 数量合計 FROM tran GROUP BY CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END ORDER BY CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END;

  • ASPからのSQL文でエラーが発生

    ASPでoracleのデータを集計しようとしたところ、SQL文でエラーが発生してしまいました。 (ORA-00911: 文字が無効です。) 同じSQL文を「SQLPlus Worksheet」で実行してみたら、問題なく実行できました。 エラーの原因を教えてください。 SELECT CASE WHEN 処理CD = '1' AND 集計F = 'Y' THEN '1Y' WHEN 処理CD = '1' AND 集計F <> 'Y' THEN '1N' END AS kubun, COUNT(連番) AS kensu SUM(金額) AS kingaku FROM aaa WHERE 日付 = '200701' GROUP BY CASE WHEN 処理CD = '1' AND 集計F = 'Y' THEN '1Y' WHEN 処理CD = '1' AND 集計F <> 'Y' THEN '1N' END kubun毎に金額の合計値などを集計したいというような感じです。 よろしくお願い致します。

  • SQL文で在庫推移を得る。

    初期在庫数と入庫数と出庫数で現在の在庫数を得るSQL文を作りたいです。例としては下記のような感じです。 単純なようですが、以外と難しく、すでに作成されていれば教えて頂きたいと思います。ヒントになることでも構いません。 ここでは在庫と言っておりますが、キャッシュフロー全てに通用すると思います。ご興味のある方、挑戦してみてはいかがでしょう。 P.S.昨日SQL文の質問をさせて頂きました。今日もSQLで悩んでおります。 例: 日付|初期在庫|入庫|出庫|在庫 1/1 |10   |  |  |10 1/2 |    |3  |  |13 1/3 |    |6  |3  |16 1/4 |    |9  |10 |15 1/5 |    |1  |  |16 1/6 |    |  |10 |6 1/7 |    |  |1  |5

  • フォーム上でデータをあるテーブルに追加するには?

    お願いします。 Accessで出庫と在庫の管理を行うと考えてます。 出庫のリストは他のソフトからCSVでインポートでテーブル「importitem」に入ります。同品番の出庫数の集計を兼ねてクエリを行います。クエリ「出庫リスト」ができました。それをフォームにして 「出庫日」「品番」「商品名」「出庫数」の項目です。このフォームで1データづつ確認してボタン「在庫引き落とし」で在庫をマイナスします。その後(同時なら最高)出庫履歴のテーブルに追加書き込みをしたいと考えてます。 在庫引き落としはsqlを使いました。 strSQL = "UPDATE 在庫 SET 在庫.在庫数 = [在庫]![在庫数]-[Forms]![出庫リスト]![出庫数の合計] WHERE (((在庫.品番)=[Forms]![出庫リスト]![品番]))" うまくいきましたが、出庫履歴テーブルへの追加書き込みが良く分かりません。insert??ではないと思うのですが、 どうか アドバイスをお願いします。

  • GROUP BYと副問い合わせ

    SQLで悩んでいるので質問いたします。 テーブル例 日付 タイプ 個数  0901  1    5 0901  1    3 0901  2    2 0901  2    4 0901  3    1 0901  3    2 0902  1    5 0902  1    3 : : とあります。 このデータを日付毎、タイプ毎に個数を取得したいと考えています。 そこで下記のようにSQLを実行 SELECT 日付、sum(個数)asタイプ別個数、タイプ count(*) as タイプ別レコード数 FROM テーブル名 GROUP BY 日付、タイプ ORDER BY 日付、タイプ 取得できるレコードは下記のようになります。 日付 タイプ別個数 タイプ タイプ別レコード数 0901      8    1     2 0901      6    2     2 0901      3    3     2 : となります。 ここまでは簡単にいけたのですが、 できればタイプ別の個数を日付で1レコードで取得できないかと悩んでいます。 期待している取得レコードは下記です。 日付 タイプ1個数 タイプ2個数 タイプ3個数 レコード数 0901     8      6      3      6 0902 : このようにするためにSELECT部分に副問い合わせをしようとしていますがうまくいきません。 SQLで出来る方法があれば、教えてください。 よろしくお願いします。

  • SQLでの集計について

    こんにちわ。以下のようなテーブルから条件に見合う合計を出したいと思いSQLを書いてみたのですが、 思った結果になりません。 テーブルA ID1 得意先Cd 営業所Cd 日付 1  001    001  2005/09/01 2  001    002  2005/09/01 3  001    001  2005/09/03 テーブルB ID2 ID1 部署 数量 金額 1  1  01  1  1000 2  1  01  1  1000 3  1  02  1  1000 4  2  01  1  1000 5  2  01  1  1000 6  3  01  1  1000 7  3  01  1  1000 8  3  02  1  1000 [抽出結果] 得意先Cd 営業所Cd 日付  部署 数量(Sum) 金額(Sum) 001    001  2005/09/01 01   2   2000 001    001  2005/09/01 02   1   1000 001    001  2005/09/03 01   2   2000 001    001  2005/09/03 02   1   1000 001    002  2005/09/01 01   2   2000 [SQL] select 得意先Cd,営業所Cd,日付,部署,SUM(数量) As '数量計',SUM(金額) As '金額計' from テーブルA AA Inner join テーブルB BB ON (AA.ID1 = BB.ID1) group by 得意先Cd,営業所Cd,日付,部署,数量,金額 order by 得意先Cd,営業所Cd,日付,部署 このSQLを実行すると、日付、部署共に同じ場合でも数量・金額が合計値となりません。 得意先Cd 営業所Cd 日付  部署 数量 金額 001    001  2005/09/01 01 1  1000 001    001  2005/09/01 01 1  1000 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。

  • SQLのエラーについて

    SQLの初心者です。 アクセス2000で下記のSQLを実行するとエラーになります。 SQLの書き方に問題が有るのでしょうか? どなたか教えて頂けたら幸いです。 宜しくお願いします。 エラーの内容 SQL実行中に以下のエラーが発生しました。 エラーコード:-3100 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD' の 構文エラー : 演算子がありません。 SQLステータス:37000 SQLの内容 SELECT U.商品CD,商品マスタ.商品名,U.受払年月日,U.部署CD,部署マスタ.部署名, U.SUM受払数 AS 受払数 FROM [SELECT 商品CD,受払年月日,部署CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = 20110513 GROUP BY 商品CD,部署CD,受払年月日,受払数] AS U INNER JOIN 商品マスタ ON U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD ORDER BY 商品CD,部署CD,受払年月日,受払数

専門家に質問してみよう