みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

各行が一意でないテーブルの自己結合について

各行が一意(ユニーク)では無い表の自己結合

テーブルの結合についてご質問させてください。

テーブル「P」から、自己結合して、テーブル「Q」を作ります。
(下記参照)
しかし、私の作成したSQLでは、テーブル「R」になってしまいます。


テーブル「P」:
typedata1 data2 price
Aああ いい100
Aああ いい200
Aああ いい300
Bいい ああ400
Bいい ああ200

テーブル「Q」
DATA(A1) DATA(A2) price(A) DATA(B1) DATA(B2) price(B)
ああ いい 600 いい ああ 600

テーブル「R」
DATA(A1) DATA(A2) price(A) DATA(B1) DATA(B2) price(B)
ああ いい 1800 いい ああ 1200

使用したSQL
select
P1.data1 as DATA(A1),
P1.data2 as DATA(A2),
SUM(P1.price) as price(A),
P2.data2 as DATA(B1),
P2.data1 as DATA(B2),
SUM(P2.price) as price(B)
from P as P1,P as P2
where P1.data1 = P2.data2
AND P1.data2 = P2.data1
group by
P1.data1,
P1.data2,
Q1.data1,
Q1.data2;

使用したSQLでは、where句での絞り込みが原因で、同じtypeで繰り返し集約してしまっているため、
目標のテーブルを作成することができませんでした。
上記のテーブル「P」のように、各行が一意でないものについては、どのように自己結合を
行えばよろしいのでしょうか。

投稿日時 - 2010-11-23 02:55:43

QNo.6337865

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

こんにちは。

カテゴリーがOracleなので、Oracleでいいのかな?
バージョン不明ですが・・・。

まぁ、書き方はいろいろありますが・・・、

SELECT
P1.data1 as DATA(A1),
P1.data2 as DATA(A2),
P1.price as price(A),
P2.data1 as DATA(B1),
P2.data2 as DATA(B2),
P2.price as price(B)
FROM
(SELECT data1, data2, SUM(price) as price FROM P WEHERE type = 'A' GROUP BY data1, data2) P1,
(SELECT data1, data2, SUM(price) as price FROM P WEHERE type = 'B' GROUP BY data1, data2) P2

っちゅう事じゃないのかな?
根本的に間違ってる???

投稿日時 - 2010-11-25 14:32:52

あなたにオススメの質問