【初歩的?SQL教えてください】

最初の正解者2名に100PTずつ。
MSのSQLServer2000です。

ひとつのテーブルAの中で、以下のデータをSELECTしたい。

A.KEY1 が同じで
A.KEY2 が’0’のデータと’1’のデータにおいて
A.VALU が同じもの

例えば、以下のデータ列があったとする。

KEY1 KEY2 VALU
AAAA 0 10
AAAA 1 5
AAAA 2 5
BBBB 0 20
BBBB 1 20

ここでは、AAAA0とAAAA1においてVALUが異なるが、BBBB0とBBBB1はVALUが同じ。
こういうときにKEY1=’BBBB’のみSELECTされる、としたい。

すごく簡単そうなんだけど、分かりません。うーん。お願いします。
(念のため。KEY1とKEY2は別フィールドになってます。)

急いでいますので、「検証してないけどたぶんこれでOK」みたいな回答でもOKです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/29 12:27:51
  • 終了:--

回答(5件)

id:kuskus No.1

kuskus回答回数1ベストアンサー獲得回数02005/11/29 12:46:31

ポイント100pt

http://www.hatena.ne.jp/1133234871#

人力検索はてな - 【初歩的?SQL教えてください】 最初の正解者2名に100PTずつ。 MSのSQLServer2000です。 ひとつのテーブルAの中で、以下のデータをSELECTしたい。 A.KEY1 が同じで A.KEY2 ..

SELECT KEY2EQ0.KEY1

FROM

(

SELECT KEY1,VALU

FROM test

WHERE KEY2=0

) AS KEY2EQ0

,

(

SELECT KEY1,VALU

FROM test

WHERE KEY2=1

) AS KEY2EQ1

WHERE KEY2EQ0.KEY1=KEY2EQ1.KEY1

AND KEY2EQ0.VALU=KEY2EQ1.VALU

id:t-ueno

なるほどー

ありがとうございます

2005/11/29 13:22:15
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/11/29 12:49:46

ポイント10pt

select * from (select KEY1 a,VALU b,count(*) c from テーブルA group by KEY1,VALU) aa where aa.c>1


オラクルで確認したんですが、これでできるかな?

id:t-ueno

すいません、1番でとりあえず正解なので、まずはこれで仕事を進めます

検証は別な時にやりますので、申し訳ありませんがしばらく放置させていただきます

というか、この文だとKEY2が’0’と’1’においてVALUが等しい、という条件が加味されていないような気がするのは、わたしが未熟だから?

2005/11/29 13:29:40
id:web_nao No.3

web_nao回答回数7ベストアンサー獲得回数02005/11/29 12:50:56

ポイント100pt

http://www.hatena.ne.jp/1133234871

人力検索はてな - 【初歩的?SQL教えてください】 最初の正解者2名に100PTずつ。 MSのSQLServer2000です。 ひとつのテーブルAの中で、以下のデータをSELECTしたい。 A.KEY1 が同じで A.KEY2 ..

select KEY1, VALU

from テーブルA

where KEY2 in (’0’, ’1’)

group by KEY1, VALU

having count(*) >= 2


Oracleでしか試せないのですが、いかがでしょうか?(select のvaluはなくても良いです)

id:t-ueno

おお、2番の回答でおかしいなと思ったことが解消されてますね

とりあえず、次いきます

2005/11/29 13:31:01
id:andi No.4

andi回答回数448ベストアンサー獲得回数02005/11/29 12:57:04

ポイント30pt

こんな感じでしょうか。

(KEY1/2がPKで重複しないことが前提)


SELECT KEY1,VALU

FROM テーブル1

WHERE KEY2 IN(0,1)

GROUP BY KEY1,VALU

HAVING COUNT(*) > 1;

id:t-ueno

おー、3と同じですねー

ありがとうございます

とりあえず締めます

2005/11/29 16:55:42
id:n_kusano No.5

n_kusano回答回数48ベストアンサー獲得回数12005/11/29 13:31:46

ポイント40pt

http://www.rfs.jp/sb/sql/

SQL講座 ++++[smart]

こんなのどうですか。

select distinct table_1.* from table as table_1, table as table_2

where table_1.key1 = table_2.key1

and table_1.value = table_2.value

and table_1.key2 != table_2.key2

and table_1.key1 in (’0’,’1’)

id:t-ueno

試しに開けてみました。

「from table as table_1, table as table_2」のところ、これがやりたい場面ってたくさんあるんですよね。ひとつのテーブル内で2つの行の関係を抽出したいとき。

今回はそれの典型的な場面だったんですが、この回答も参考になりました。今はもう場所を変えており検証できませんが、ありがとうございました。

URLもすごくいいですね。

これにて終了です。

すいませんが、100PTは最初の正解2名のみとさせていただきます。

2005/11/29 17:03:11

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 2005-11-29 2005-11-29 2006-03-13 16:13:16
    http://www.hatena.ne.jp/1133234871 SQLServer2000は分かりません。 SQL*Plusで考えてみました。 未検証。 select KEY1, count(*) from テーブルA group by KEY1, VALU having count(*) >= 2 / …あとで書き直します。
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません