- PR -

テーブル間の結合

投稿者投稿内容
ハンドル
会議室デビュー日: 2008/01/25
投稿数: 16
投稿日時: 2008-11-27 14:38
3っつの同じ構成のテーブルの合計値を取りたいと考えております。

テーブルが3っつ(A、B、C)存在します。
テーブルの構成は下記のような全て同じフィールド内容です。

コード:
(A)
CODE |    DATE    | ERROR_1 | ERROR_2
------------------------------------
  1  | 2008/11/20 |    5    |    0
------------------------------------
  2  | 2008/11/21 |    2    |    2
------------------------------------
  3  | 2008/11/21 |    10   |    3

(B)
CODE |    DATE    | ERROR_1 | ERROR_2
------------------------------------
  1  | 2008/11/20 |    2    |    0
------------------------------------
  5  | 2008/11/21 |    2    |    2

(A)
CODE |    DATE    | ERROR_1 | ERROR_2
------------------------------------
  3  | 2008/11/21 |    4    |    1



上記のレコードをID、DATEでGroup Byした結果が下記のようになるにはどのようなSQLを組めばよいのでしょうか?

コード:
CODE |    DATE    | ERROR_1 | ERROR_2
------------------------------------
  1  | 2008/11/20 |    7    |    0
------------------------------------
  2  | 2008/11/21 |    2    |    2
------------------------------------
  3  | 2008/11/21 |    14   |    4
------------------------------------
  5  | 2008/11/21 |    2    |    2


KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2008-11-27 15:29
どこまで出来ていて、なにが出来ないのでしょうか?

結合が出来ないのでしょうか?
group byが出来ないのでしょうか?
合計値の取り方が分からないのでしょうか?
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-11-27 15:46
データベースは何ですか?
UNION ALL したらいいんじゃないですか?

[ メッセージ編集済み 編集者: King 編集日時 2008-11-27 15:56 ]
ハンドル
会議室デビュー日: 2008/01/25
投稿数: 16
投稿日時: 2008-11-27 15:56
言葉足らずで申し訳ありません。

>どこまで出来ていて、なにが出来ないのでしょうか?

>結合が出来ないのでしょうか?
>group byが出来ないのでしょうか?
>合計値の取り方が分からないのでしょうか?

結合の書き方がわかりません。
結合はJOINを使うと考えているのですが、自信がありません。

Group ByはCODE、DATEでまとめればよいと考えています。

合計値はSUM(ERROR_1)のように記述すればよいと考えています。

3っつのテーブルを結合してCODE、DATEフィールドでGroup Byすれば結果が取れるのかなとは思うのですが・・・

Access2007でテストしております。
ハンドル
会議室デビュー日: 2008/01/25
投稿数: 16
投稿日時: 2008-11-27 16:02
引用:

Kingさんの書き込み (2008-11-27 15:46) より:
データベースは何ですか?
UNION ALL したらいいんじゃないですか?

[ メッセージ編集済み 編集者: King 編集日時 2008-11-27 15:56 ]



DBはAccess2007です。
UNION ALLを使った場合
コード:
SELECT CODE, DATE, SUM(ERROR_1), SUM(ERROR_2) FROM A GROUP BY CODE, DATE
UNION ALL
SELECT CODE, DATE, SUM(ERROR_1), SUM(ERROR_2) FROM B GROUP BY CODE, DATE
UNION ALL
SELECT CODE, DATE, SUM(ERROR_1), SUM(ERROR_2) FROM C GROUP BY CODE, DATE
ORDER BY DATE;



のように記述すればよいのでしょうか?

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-27 16:27
要するに、UNION ALL を使って
コード:
CODE |    DATE    | ERROR_1 | ERROR_2
------------------------------------
  1  | 2008/11/20 |    5    |    0
------------------------------------
  2  | 2008/11/21 |    2    |    2
------------------------------------
  3  | 2008/11/21 |    10   |    3
------------------------------------
  1  | 2008/11/20 |    2    |    0
------------------------------------
  5  | 2008/11/21 |    2    |    2
------------------------------------
  3  | 2008/11/21 |    4    |    1


このような中間結果を作成したあと、それを集計すればよいわけです。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-11-27 16:34
UNION ALL したものをサブクエリにすれば
それは1つのテーブルのように扱えるから
それを集計すれば良いのではないでしょうか。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-11-27 18:51
SELECT CODE, DATE, SUM(ERROR_1), SUM(ERROR_2) FROM
(
SELECT CODE, DATE, ERROR_1, ERROR_2 FROM A
UNION ALL
SELECT CODE, DATE, ERROR_1, ERROR_2 FROM B
UNION ALL
SELECT CODE, DATE, ERROR_1, ERROR_2 FROM C
)
GROUP BY CODE, DATE
ORDER BY DATE;

スキルアップ/キャリアアップ(JOB@IT)