- PR -

テーブルの結合

投稿者投稿内容
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2004-09-09 22:45
 テーブルA,B,CからUNIONで一意に日付を取得したものにテーブルA,B,Cを外部結合。
 で、どないでしょ?
 集計がいるなら外部結合する前にテーブルA,B,Cは先に集計。
未記入
大ベテラン
会議室デビュー日: 2003/11/24
投稿数: 121
投稿日時: 2004-09-09 23:10
完全外結合(full outer join)すればいいよ。
もっと良いのはカレンダーテーブルを用意して、カレンダーテーブルに対して
3つのテーブルをすべて外結合(left outer join)することだけどね。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-09-10 16:47
こんにちは。

このような感じでしょうか。。。

コード:
SELECT	ALLDATE.日付,
	A.SURYOA,
	B.SURYOB,
	C.SURYOC
FROM
    (
	SELECT  日付  FROM  テーブルA
	UNION
	SELECT  日付  FROM  テーブルB
	UNION
	SELECT  日付  FROM  テーブルC
	ORDER BY 1
    ) ALLDATE,
    (	SELECT  日付, SUM(数量A) AS SURYOA  FROM  テーブルA GROUP BY  日付 ) A,
    (	SELECT  日付, SUM(数量B) AS SURYOB  FROM  テーブルB GROUP BY  日付 ) B,
    (	SELECT  日付, SUM(数量C) AS SURYOC  FROM  テーブルC GROUP BY  日付 ) C
WHERE	ALLDATE.日付 = A.日付 (+)
AND	ALLDATE.日付 = B.日付 (+)
AND	ALLDATE.日付 = C.日付 (+);

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-10 22:22
 Sumしなければいけないのですかね?はにまるさんが『仕様確認が一切無しで終わりましたね』といわれていますけど、仕様確認なしに提示するのもどうかと。パンダさんは「同じ日付を足し込む」とは一言も言われてないし、元の投稿の例も、同じテーブルに同じ日付のデータはありません。なので、未記入さんの『完全外結合(full outer join)すればいいよ』ではないか、と思います。

未検証
コード:

SELECT "テーブルA"."日付", "数量A", "数量B", "数量C"
FROM "テーブルA"
NATURAL FULL OUTER JOIN "テーブルB"
NATURAL FULL OUTER JOIN "テーブルC"



[ メッセージ編集済み 編集者: Jitta 編集日時 2004-09-10 22:23 ]