人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【初歩的?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です。

●質問者: t-ueno
●カテゴリ:コンピュータ
✍キーワード:MS SELECT SQL ひとつ データ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● kuskus
●100ポイント

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

◎質問者からの返答

なるほどー

ありがとうございます


2 ● きゃづみぃ
●10ポイント

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

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


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

◎質問者からの返答

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

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

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


3 ● web_nao
●100ポイント

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はなくても良いです)

◎質問者からの返答

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

とりあえず、次いきます


4 ● andi
●30ポイント

http://a/

こんな感じでしょうか。

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


SELECT KEY1,VALU

FROM テーブル1

WHERE KEY2 IN(0,1)

GROUP BY KEY1,VALU

HAVING COUNT(*) > 1;

◎質問者からの返答

おー、3と同じですねー

ありがとうございます

とりあえず締めます


5 ● n_kusano
●40ポイント

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’)

◎質問者からの返答

試しに開けてみました。

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

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

URLもすごくいいですね。

これにて終了です。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ