C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: SQL 区分に1と0の混在を見つけたい


(過去ログ 111 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■65981 / inTopicNo.1)  SQL 区分に1と0の混在を見つけたい
  
□投稿者/ NattoRC (2回)-(2013/03/27(Wed) 22:14:26)

分類:[データベース全般] 

よろしくお願いします。

下記のようなテーブルがあったとします。
この場合、区分が所属をキーにすると「1」か「0」かどちらかとなっています。
区分が1と0が混在しているようなレコードを見つけることのできるSQLはどのように書いたら良いでしょうか?
where条件でIN句をAND条件で下記のように他のですが、うまくいきませんでした。

たとえばこのような所属です。
所属  所有物  区分
555  abc    1
555  bcd    1
555  cde    0
555  efg    0
555  fgh    1


select
*
from
TBLCOMPANY A
inner join
TBLCOMPANY B
on
 A.所属 =B.所属
 AND A.所有物 =B.所有物
where
 A.区分 IN (1)
 AND A.区分 IN (0)


TBLCOMPANY

所属  所有物  区分
111  abc    1
111  bcd    1
111  cde    1
111  efg    1
111  fgh    1
222  abc    0
222  bcd    0
222  cde    0
222  efg    0
222  fgh    0
333  abc    1
333  bcd    1
333  cde    1
333  efg    1
333  fgh    1
444  abc    0
444  bcd    0
444  cde    0
444  efg    0
444  fgh    0


引用返信 編集キー/
■65983 / inTopicNo.2)  Re[1]: SQL 区分に1と0の混在を見つけたい
□投稿者/ バベ (1回)-(2013/03/27(Wed) 22:51:27)
ちょっと質問の内容が分かりにくいのですが、
テーブル内の同じ所属のデータの中で、区分に0と1が混在している場合、
その所属のデータをすべて抽出する、ということでしょうか?

例えば、テーブルの内容が以下のような場合、
(例の内容を勝手にアレンジしています)

所属  所有物  区分
111  abc    1
111  bcd    1
111  cde    1
111  efg    1
111  fgh    1
222  abc    0
222  bcd    0
222  cde    0
222  efg    0
222  fgh    0
333  abc    1
333  bcd    0
333  cde    1
333  efg    1
333  fgh    1
444  abc    0
444  bcd    0
444  cde    0
444  efg    0
444  fgh    0
555  abc    1
555  bcd    1
555  cde    0
555  efg    0
555  fgh    1

希望する抽出結果は、

所属  所有物  区分
333  abc    1
333  bcd    0
333  cde    1
333  efg    1
333  fgh    1
555  abc    1
555  bcd    1
555  cde    0
555  efg    0
555  fgh    1

ということでしょうか?
引用返信 編集キー/
■65984 / inTopicNo.3)  Re[2]: SQL 区分に1と0の混在を見つけたい
□投稿者/ NattoRC (3回)-(2013/03/27(Wed) 22:59:57)
No65983 (バベ さん) に返信
>
> 希望する抽出結果は、
>
> 所属  所有物  区分
> 333  abc    1
> 333  bcd    0
> 333  cde    1
> 333  efg    1
> 333  fgh    1
> 555  abc    1
> 555  bcd    1
> 555  cde    0
> 555  efg    0
> 555  fgh    1
>
> ということでしょうか?

説明不足ですみません。

上記でもいいですし、下記でも大丈夫です。混在している所属をキーに
0と1が混在しているのがわかればよいです。

所属
333
555

よろしくお願いします。

引用返信 編集キー/
■65987 / inTopicNo.4)  Re[3]: SQL 区分に1と0の混在を見つけたい
□投稿者/ バベ (2回)-(2013/03/28(Thu) 05:52:09)
2013/03/28(Thu) 06:41:52 編集(投稿者)

それでは、以下のようにサブクエリを使ってみてはどうでしょう。
※DISTINCTを使っていますが、GROUP BYを使ってもいいかもしれません。
 あと、区分は文字列系を想定していますが、数値系の場合は
 シングルクォーテーションで囲む必要はありません。

SELECT DISTINCT 所属
FROM TBLCOMPANY
WHERE 所属 IN (
SELECT DISTINCT 所属
FROM TBLCOMPANY
WHERE 区分 = '0')
AND 所属 IN (
SELECT DISTINCT 所属
FROM TBLCOMPANY
WHERE 区分 = '1')

あるいは、所属の列だけを抽出するのであれば、以下の方法でもいいと思います。

SELECT DISTINCT A.所属
FROM TBLCOMPANY A
INNER JOIN (
SELECT DISTINCT 所属
FROM TBLCOMPANY
WHERE 区分 = '0') B
ON A.所属 = B.所属
WHERE A.区分 = '1'

引用返信 編集キー/
■65995 / inTopicNo.5)  Re[4]: SQL 区分に1と0の混在を見つけたい
□投稿者/ shu (250回)-(2013/03/28(Thu) 10:08:08)
2013/03/28(Thu) 10:08:22 編集(投稿者)
No65987 (バベ さん) に返信

別の方法
クロス集計を利用

Select 所属
From (
    Select 所属 
       , SUM(CASE WHEN 区分 = '0' THEN 1 ELSE 0 END) Count0
       , SUM(CASE WHEN 区分 = '1' THEN 1 ELSE 0 END) Count1
    From TBLCOMPANY
    Group By 所属
) TBL
WHERE Count0>0 And Count1>0

引用返信 編集キー/
■66047 / inTopicNo.6)  Re[5]: SQL 区分に1と0の混在を見つけたい
□投稿者/ NattoRC (11回)-(2013/03/29(Fri) 09:01:53)
No65995 (shu さん) に返信
> 2013/03/28(Thu) 10:08:22 編集(投稿者)
>
> ■No65987 (バベ さん) に返信
>
> 別の方法
> クロス集計を利用
>
> Select 所属
> From (
> Select 所属
> , SUM(CASE WHEN 区分 = '0' THEN 1 ELSE 0 END) Count0
> , SUM(CASE WHEN 区分 = '1' THEN 1 ELSE 0 END) Count1
> From TBLCOMPANY
> Group By 所属
> ) TBL
> WHERE Count0>0 And Count1>0

お二方ともありがとございます。参考にさせていただきます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -