• ベストアンサー

GROUP BY と DISTINCT

SQLPLUSにおいて、ある表X1(code1,code2)に (A,1),(A,1),(A,2),(A,2),(A,3),(A,3) (B,4),(B,4),(B,5),(B,5),(B,6),(B,6) というデータがあり、別の表X2(data1,data2)に (1,10),(2,20),(3,30),(4,40),(5,50),(6,60) というデータがある場合に(X2の左の要素はprimary) 結果として(A,60),(B,150)というデータを得たいのですが、GROUP BY や DISTINCT を使おうするとエラーになってしまいうまくいきません。 <select code1,sum(data2) from X1,X2 where distinct(X1.code2) = X2.data1 group by code1> みたいな感じでやりたいのですが、(distinctがこの使い方でできないのはわかってます)どうしたらいいでしょうか? ちなみに副問合せを使って先にX1から(A,1),(A,2)...(B,6)をセレクトしようとしてもダメでした。 説明がわかりづらくて申し訳ございませんがどなたか詳しい方のアドバイスをお願い致します

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

  • ベストアンサー
回答No.2

こんにちは。 普通にX1をユニークにしてから結合すればよいかと・・・。 SELECT CODE1, SUM(DATA2) FROM X2, (SELECT UNIQUE * FROM X1) X WHERE X.CODE2 = DATA1 GROUP BY CODE1 ほかにも書き方は考えられますが、一番シンプルかな? (^^ゞ

その他の回答 (1)

回答No.1

こういうこと? select code1,sum(data2) from (select distinct * from X1) A, X2 where A.code2 = X2.data1 group by code1 テーブルX1の重複データが邪魔なら、先に単一化する。