- ベストアンサー
条件が混在している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等プログラミングが入っても問題ありません
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
select s1 from テーブル名 where code in ( 0, 1) group by s1 having count( distinct code ) > 1 でどうでしょう。
その他の回答 (4)
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちは。 >>どれがどれか繋がっていて分からない(汗) まぁ、同意ですが、こうですかね。 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では確認済みです。
お礼
ご回答ありがとうございます。 かつご推察ありがとうございます。 Code=1のテーブルと、Code=0の別名テーブルの処理ですね! 大変参考になります。ありがとうございます。 >上は、SQLServerでは確認済みです。 ありがとうございます♪
- singlecat
- ベストアンサー率33% (139/418)
ベタですが、こんな感じかな? SELECT S1 FROM テーブル1 GROUP BY S1 HAVING Min(CODE)=0 AND Max(CODE)=1 ORDER BY S1;
お礼
ご回答ありがとうございます。 シンプルですが、分かり易いです。 HAVINGでCode=0と=1の存在を確かめるのですね! 大変参考になります。ありがとうございます。
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
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 です。
お礼
ご返信ありがとうございます。 EXISTSを使用する方法と、別名テーブルを作成し、Code=0と=1の混在を見つけ出すと。 大変参考になります。 ありがとうございます。
- suhixinkusu
- ベストアンサー率5% (2/40)
NoS1Code 13001 23011 33000 43010 53021 63020 73021 83030 93041 103050 113050 どれがどれか 繋がっていて分からない(汗)
補足
返信ありがとうございます。 ですよね^^; 文字間をタブでしたら、見事連なってしまいました すみません 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 空白大丈夫かな…
お礼
ご回答ありがとうございます。 >having count( distinct code ) > 1 こういう使い方が出来るのを全く知りませんでした。 大変参考になります。ありがとうございます。