- PR -

データ抽出が上手くいきません

投稿者投稿内容
kukumimi
会議室デビュー日: 2008/12/30
投稿数: 5
投稿日時: 2008-12-30 18:12
初心者なのですが、宜しくお願いします。
code id suuchi
100 0 10
100 0 10
100 0 10
100 1 10
100 1 20
101 0 10
101 0 10
101 0 10
101 1 20
101 1 20
101 1 20
102 0 20
102 1 20

上のようなTBLがあるのですが、
同じcodeで
idが'0'の場合のsuuchiの合計数と
idが'1'の場合のsuuchiの合計数が一致している場合に
データを抽出してcodeを表示したいです。

以下のように、code、idごとのsuuchiの合計は
一致しているため
code id suuchi(合計)
100 0 30
100 1 30
102 0 20
102 1 20

こののようなデータを抽出したいです。
code
100
102

HAVING句でSUM(CASE WHEN id = '0' THEN suuchi ELSE 0 END)
= SUM(CASE WHEN id = '1' THEN suuchi ELSE 0 END)
を使用するのかなと思いましたが、なかなか上手くいきません。
どなたか教えて頂けないでしょうか?
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-12-30 21:03
回答ではありませんが データベース名を明記しないと満足する回答できません

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-12-30 22:12
(下記の文法が通るDBなら)下記でどうでしょうか。

コード:

SELECT test0.code
FROM
(SELECT code, SUM(suuchi) AS suuchi
FROM test
WHERE (id = 0)
GROUP BY code) AS test0
INNER JOIN
(SELECT code, SUM(suuchi) AS suuchi
FROM test AS test_1
WHERE (id = 1)
GROUP BY code) AS test1
ON test0.code = test1.code AND test0.suuchi = test1.suuchi



[追記]
とんくまさんのでいけますよね。最初にkukumimiさんが書いたものと同じはずなんですが。

[ メッセージ編集済み 編集者: べる 編集日時 2008-12-31 12:30 ]
kukumimi
会議室デビュー日: 2008/12/30
投稿数: 5
投稿日時: 2008-12-31 00:26
七味唐辛子さん。
そうですね。
データベース名は testdb
テーブル名は testtable
でお願いします。

べるさん。
ありがとうございます。
私にとって使い慣れていない構文ですので
調べて試したいと思います。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-12-31 04:41
引用:

データベース名は testdb
テーブル名は testtable
でお願いします。



そういう意味ではなく、RDBMS名(Oracleとか、SQL Serverとか、MySQLとか)とバージョンを明記してください。
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2008-12-31 05:53
コード:
SELECT code
  FROM testdb.testtable
 GROUP BY code
HAVING SUM(CASE WHEN id = 0 THEN suuchi ELSE 0 END)
     = SUM(CASE WHEN id = 1 THEN suuchi ELSE 0 END)
;


kukumimi
会議室デビュー日: 2008/12/30
投稿数: 5
投稿日時: 2008-12-31 12:40
ご指摘ありましたので、ご返事します。SQL Serverを使用してます。
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2009-01-02 03:19
引用:

kukumimiさんの書き込み (2008-12-31 12:40) より:
SQL Serverを使用してます。


バージョンは?

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