• ベストアンサー

条件が混在しているSQLで値取得

いつもありがとうございます。 質問させて下さい。 以下のテーブルより、S1が同値で、Codeに1と0が混じっている場合、SQLでS1を取得したいのです。 No S1 Code 1 300 1 2 301 1 3 300 0 4 301 0 5 302 1 6 302 0 7 302 1 8 303 0 9 304 1 10 305 0 11 305 0 (Noはキー) 望む結果 S1 300 301 302 どういうSQLを組めば実現可能なのでしょうか? 有識者の方、ご享受宜しくお願い申し上げます。 ※VBA等プログラミングが入っても問題ありません

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.5

select s1 from テーブル名 where code in ( 0, 1) group by s1 having count( distinct code ) > 1 でどうでしょう。

yuji_from_kyoto
質問者

お礼

ご回答ありがとうございます。 >having count( distinct code ) > 1 こういう使い方が出来るのを全く知りませんでした。 大変参考になります。ありがとうございます。

その他の回答 (4)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.4

こんちは。 >>どれがどれか繋がっていて分からない(汗) まぁ、同意ですが、こうですかね。 No/S1/Code 1/300/1 2/301/1 3/300/0 4/301/0 5/302/1 6/302/0 7/302/1 8/303/0 9/304/1 10/305/0 11/305/0 え?違う? 知らんがなっ・w・; まぁ、違わなかった前提。で前進。 select distinct a.S1 from hoge as a inner join hoge as b on a.code = 0 and b.code = 1 and a.S1 = b.S1 hogeの中で、codeが1のものと hogeの中で、codeが0のものを ひっぱり出してきて、S1が同じ値。って条件で結合してやればよい。 ただし、S1が複数出てくるのでdistinctで重複を削ってやる。 え?いつも使ってるSQLの文法と違う? オラクルだかMySQLだかポスグレだか知りませんが、指定しない方が悪いんだっ_no 上は、SQLServerでは確認済みです。

yuji_from_kyoto
質問者

お礼

ご回答ありがとうございます。 かつご推察ありがとうございます。 Code=1のテーブルと、Code=0の別名テーブルの処理ですね! 大変参考になります。ありがとうございます。 >上は、SQLServerでは確認済みです。 ありがとうございます♪

  • singlecat
  • ベストアンサー率33% (139/418)
回答No.3

ベタですが、こんな感じかな? SELECT S1 FROM テーブル1 GROUP BY S1 HAVING Min(CODE)=0 AND Max(CODE)=1 ORDER BY S1;

yuji_from_kyoto
質問者

お礼

ご回答ありがとうございます。 シンプルですが、分かり易いです。 HAVINGでCode=0と=1の存在を確かめるのですね! 大変参考になります。ありがとうございます。

回答No.2

SELECT DISTINCT S1 FROM テーブル名 T1 WHERE EXISTS(SELECT ' ' FROM テーブル名 T2 WHERE T2.S1=T1.S1 AND T2.Code=1) AND Code=0 または SELECT DISTINCT T1.S1 FROM テーブル名 T1 INNER JOIN テーブル名 T2 ON T2.S1=T1.S1 AND T1.Code=0 AND T2.Code=1 です。

yuji_from_kyoto
質問者

お礼

ご返信ありがとうございます。 EXISTSを使用する方法と、別名テーブルを作成し、Code=0と=1の混在を見つけ出すと。 大変参考になります。 ありがとうございます。

回答No.1

NoS1Code 13001 23011 33000 43010 53021 63020 73021 83030 93041 103050 113050 どれがどれか 繋がっていて分からない(汗)

yuji_from_kyoto
質問者

補足

返信ありがとうございます。 ですよね^^; 文字間をタブでしたら、見事連なってしまいました すみません No S1 Code 1 300  1 2 301  1 3 300  0 4 301  0 5 302  1 6 302  0 7 302  1 8 303  0 9 304  1 10 305 0 11 305 0 空白大丈夫かな…

関連するQ&A