- ベストアンサー
unionの結果は集計はできないですよね。。。。
【明細データ】と【変換テーブル】で、変換後明細データを作成 して、その結果を集計したいのですが、、、 下記の結果を求めるためにはSQLひとつで可能でしょうか? ※(3)の表まではunionで可能でしたが、unionでは集計はできないですよね。。。。 (1)【明細データ】 CODE VALUE AMOUNT A 1000 10000 B 2000 20000 C 3000 30000 D 4000 40000 E 1001 10000 F 2001 20000 G 3000 30000 H 4000 40000 (2)【変換テーブル】 VALUE1 VALUE2 1000 1001 2000 2001 (3)【変換後明細データ】 CODE VALUE AMOUNT A 1001 10000 B 2001 20000 C 3000 30000 D 4000 40000 E 1001 10000 F 2001 20000 G 3000 30000 H 4000 40000 (4)【SQL抽出結果】が欲しい VALUE AMOUNT 1001 20000 2001 40000 3000 60000 4000 80000
- masa-it
- お礼率70% (22/31)
- Oracle
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です やっぱテストしないとダメですね テーブル作って試しました select value , sum(amount) from (select a.CODE CODE, nvl(b.value2,a.value ) value, a.AMOUNT AMOUNT from 明細データ a, 変換テーブル b where a.value = b.value1(+)) group by value
その他の回答 (3)
- tkrn
- ベストアンサー率53% (33/62)
質問者様Oracleの質問で大丈夫ですか? #Accessでの質問が多いようですが… 試してませんが、これでいけないですか? SELECT T.VALUE, SUM(T.AMOUNT) FROM (SELECT DECODE(B.VALUE2, NULL, A.VALUE, B.VALUE2) VALUE ,A.AMOUNT FROM 明細データ A LEFT JOIN 変換テーブル B ON A.VALUE = B.VALUE1 ) T GROUP BY T.VALUE
お礼
回答ありがとうございます。 Oracleです。質問にもOracleとつけておけばよかったですね。 お手数をおかけしました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select nvl(Y.VALUE1,X.VALUE) VALUE,sum(AMOUNT) AMOUNT from 明細データ X,変換テーブル Y where X.VALUE=Y.VALUE1(+) group by nvl(Y.VALUE1,X.VALUE); こんな感じ。
お礼
回答ありがとうございます。 nvl(Y.VALUE1,X.VALUE);が、 nvl(Y.VALUE2,X.VALUE); でしたが、出来ました。niceです。nvlをGourpByするのですね。 ありがとうございます。
- X-trail_00
- ベストアンサー率30% (438/1430)
これでいけるでしょう ポイントは3をインラインビューにするだけ select value , sum(amount) (select a.CODE CODE, b.VALUE2 VALUE, a.AMOUNT AMOUNT from 明細データ a, 変換テーブル b where a.value = b.value1) group by value
補足
早速の回答ありがとうございます。(Oracleです) すいません、このまま実行したらダメでした。 sumの後に fromを追加ですか? これも結果はダメでした。 > ポイントは3をインラインビューにするだけ とは、(select a.CODE CODE,b.VALUE2 VALUE,a.AMOUNT AMOUNT from 明細データ a,変換テーブル bwhere a.value = b.value1) の事ですよね。
関連するQ&A
- UNION ALLでつなげた複数ビューの集計
お世話になっています。 現在下記のようなSQLを組んでいます。 ビュー1の集計結果 UNION ALL ビュー2の集計結果 UNION ALL ビュー3の集計結果 実行結果 例 年月 人数 金額 201104 3 20000 201105 2 10000 201104 1 5000 GROUP BY句で年月を集計したビューをUNION ALLでつないでいるため、 当然のように同じ年月が何度も出てくるため、テストがしづらくなっています。 やりたいこととしては、さっきの実行結果をさらに年月で集計することを 考えています。 年月 人数 金額 201104 4 25000 201105 2 10000 対策として、下記のように集計したビューをUNION ALLでつないだ結果を さらに集計するSQLを作りました。 SELECT FROM( ビュー1の集計結果 UNION ALL ビュー2の集計結果 UNION ALL ビュー3の集計結果 ) GROUP BY その結果、下記のエラーが発生しました。 ORA-00935:グループ関数のネスト・レベルが深すぎます。 環境はoracle11gです。 あとは、SQLのFROM句の()の部分をビューとして作成し、 更にそのビューを呼び出して集計するくらいしか思いつかないです。 今回作ろうとしてるのはテスト用のSQLのため、SQL文と実行結果を残したいので、 できればビューやプロシージャーは作らずに、SQLのみで作成したいと考えています。 何か良い方法はありますでしょうか? 宜しくお願い致します。
- ベストアンサー
- Oracle
- Accessユニオンクエリーで2つのテーブルを集計
Accessのユニオンクエリーで2つのテーブルを集計したいのですが Aテーブル コード1 値 1 5 1 2 Bテーブル コード2 値 1 1 2 3 結果 コード 値 1 8 2 3 このような結果を得ることは出来ますでしょうか? SELECT Aテーブル.コード1 AS コード,Aテーブル.値 UNION SELECT Bテーブル.コード2 AS コード,Bテーブル.値 このように記述すると コード 値 1 5 1 2 1 1 2 3 このような結果になってしまうのですが・・
- ベストアンサー
- その他(データベース)
- ユニオンクエリの結果をテーブルに書き出したい
お世話になります。 Access2000で作成しています。 テーブル作成クエリと同じような形で、 ユニオンクエリの結果をテーブルに書き出したいのですが、 どのようにすればできるでしょうか? SQLの形を直接いじるような方法でも結構ですので 宜しくお願い致します。
- ベストアンサー
- その他(データベース)
- Access 2000、ユニオンクエリーがどうしても出来ない!
初歩の質問ですが、ユニオンクエリーが出来ません。 やりたい事は非常に単純です↓↓ 1:テーブル1、テーブル2、テーブル3があります。 2:各テーブルのデータ内容は様々ですが、共通項目として「品番」を持っています。但しテーブル1は「製品名」、テーブル2と3は「品番」という項目名になっています。 3:各テーブル内に、品番が幾つ入っているか、集計クエリでカウントします。項目名が違うので以下のように処理しました。 <テーブル1の場合> フィールド|品番のカウント: 製品名|タイトル: "テーブル1" テーブル |テーブル1 集 計 |カウント <テーブル2(或いは3)の場合> フィールド|品番のカウント: 品番|タイトル: "テーブル2" テーブル |テーブル2 集 計 |カウント 4:3の集計クエリーを繋ぎ、テーブル1~3の品番件数を一気に表示させたい <ユニオンクエリの内容> SELECT * from Q0_カウント_テーブル1 UNION select * from Q0_カウント_テーブル2 UNION select * from Q0_カウント_テーブル3; 5:私の予想としてはこんな風↓↓出てくるはずだったのですが・・・ 品番のカウント| タイトル ------------------------------ 30 | テーブル1 20 | テーブル2 23 | テーブル3 6:結果は「From句の間違いです」と出ます。他の質問も見ましたが、自分のSQLのどこを直せば良いのかわかりません・・・教えてください!
- 締切済み
- オフィス系ソフト
- クロス集計クエリの結果をテーブルにしたい
こんにちは。ACCESS 97、ほぼ初心者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1445032 こちら様の質問の、便乗質問です(質問者様とは関係ありません)。 品番,倉庫,数量 4944,F,190 4960,A,25 4960,B,6 4960,C,72 4960,D,20 4960,E,50 4960,F,3 4962,C,26 4962,E,4 4963,C,5 4964,A,4 4964,C,148 4964,E,42 4965,A,2 4965,C,5 4965,E,1 4966,C,4 4966,E,1 こんなデータからテーブルを作成し、クロス集計クエリで 品番 A B C D E F 4944 190 4960 25 6 72 20 50 3 4962 26 4 4963 5 4964 4 148 42 4965 2 5 1 4966 4 1 という結果を出し、上の質問の方法でテーブル作成すると、元データと同じテーブルが作成されます。 A、B、C、D、E、Fを列見出しにしたテーブルを作成したいのですが、教えてください。
- ベストアンサー
- オフィス系ソフト
- 集計結果を別テーブルに更新クエリで書き出したい。
Access2000を使っています。 テーブルとフィールドの関係は次のようになっています。 (一部、Northwind.mdbを使っています。) 受注 ---------------------- 得意先コード 受注コード 受注明細 ---------------------- 受注コード 単価 数量 売上集計 ---------------------- 得意先コード 合計 受注明細テーブルの単価と数量を掛け合わせたものの合計を 売上集計テーブルの合計に書き出したいと思います。 次の選択クエリの合計の値を売上集計テーブルの取引先コード の一致する場所に書き出したいのです。 SELECT 受注.得意先コード, Sum([単価]*[数量]) AS 合計 FROM 受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード GROUP BY 受注.得意先コード; 売上集計テーブルと受注テーブルの得意先コードは同じものが 存在します。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- excel vba DATAの日集計
excel vba DATAの日集計 いつもお世話になっています。 "DATA"シートのセル"D2"の日付を変えると表の数値が変わるようにしています。 その日毎のデータを"集計"シートの日別の表に飛ぶようにしているのですが、 1日分の転記するセル数が多く、Select Caseで31日分のコードを書くと、あまりにも プロシージャーが大きくなります。(Case1からCase31・・・結果分割してますが) FOR NEXT なのかな~、もっと効率のいい書き方がありましたらよろしくお願いします。 例:"集計"シート1日分は、9行となります。それぞれ"DATA"シートからの転記です。"DATA"シートのF5+F10,G5+G10~AC5+AC10までそれぞれの値を"集計"シートのG5からAD5まで、F6+F12,G6+G12~AC6+AC12までそれぞれの値を"集計"シートのG13からAD13までといった具合です (日の9行はそれぞれ決まったある行とある行の加算です、これが31日分の行があります) Sub macro() Dim myrng As Range Dim c As Range Set myrng = Sheets("DATA").Range("D2") For Each c In myrng Select Case c.Value Case 1 '1行目 Sheets("集計").Range("G5").Value = Sheets("DATA").Range("F5") + Sheets("DATA").Range("F10") | | Sheets("集計").Range("AD5").Value = Sheets("DATA").Range("AC5") + Sheets("DATA").Range("AC10") | | '9行目Sheets("集計").Range("G13").Value = Sheets("DATA").Range("F6") + Sheets("DATA").Range("F12") | | Sheets("集計").Range("AD13").Value = Sheets("DATA").Range("AC6") + Sheets("DATA").Range("AC12")
- ベストアンサー
- Visual Basic
- 集計のSQLについて
皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 40 Bさん 鉛筆 30 Bさん 鉛筆 30 鉛筆 10 上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者 というSQL文で, 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 70 Bさん 鉛筆 40 という結果が得られると思いますが・・・、 これを、 品名 金額 購入者 ---------------------------- 鉛筆 20 Aさん 鉛筆 70 Bさん 鉛筆 30 鉛筆 10 という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。
- ベストアンサー
- Oracle
- 難解なエクセル集計の仕方を教えてください!!
以下のように集計したいのですが、いい方法はありませんか? 解りにくいですが、宜しくお願いします!!! ------------------------ 【関係図】 (1)(2)という2つグループの関係を表しています。 組織図のようなものと思ってくださって結構です。 ■元データ 【表あ】 関係図を分解し、2つごとの関係に直したデータです。 【表い】 それぞれA-Oに対応する数字が入っています。 ■集計要望 【表あ】と【表い】ふたつのデータを元に、関係図に基づいた集計をしたい。 例: 1.Aを集計すると、Aの下位のものはすべて集計したい。(A~Gまでの集計) 2.Dを集計すると、Dの下位のみが集計されるようにしたい。(D+E+F+G) 3.Fを集計すると、Fの下位のみ集計したい。(F+G) 4. Iを集計=I+K、Jを集計=J+L+M+N+O 【関係図】 (1)A-B-C D-E F-G (2)H-I-K J-L-M N-O 【表あ】 A ― B B ― C B ― D D ― E D ― F F ― G H ― I I ― K H ― J J ― L L ― M L ― N N ― O 【表い】 A=1 B=2 C=4 D=5 E=6 F=7 G=8 H=9 I=10 J=11 K=12 L=13 M=14 N=15 O=16
- ベストアンサー
- オフィス系ソフト
- ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです
ピボットテーブルの集計結果を使って、さらに条件を付けて集計をしたいです。 たとえば、このようなピボットテーブルから、 [A] [B] [C] [D] 1月 Group Account1 Account2 G0 田中 東京 5 加藤 大阪 2 G1 佐藤 大阪 3 G1 田中 名古屋 A列のGroupをキーにして、D列を集計します。 G0の合計は7で個数は2、G1の合計は3で個数は1、という結果を出すにはどのようにしたら良いでしょうか?
- 締切済み
- その他MS Office製品
お礼
更に、作ってくださったのですね。 ありがとうございます。 ばっちりでした。 from句に select文を書いて、カラム名称を つけてあげれば、うまく出来るのですね、勉強になりました。