- ベストアンサー
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
- みんなの回答 (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) の事ですよね。
お礼
更に、作ってくださったのですね。 ありがとうございます。 ばっちりでした。 from句に select文を書いて、カラム名称を つけてあげれば、うまく出来るのですね、勉強になりました。