- ベストアンサー
SQLで特定の検査種別のスタッフを抽出する方法
- VB.Netを使用して、当事業所の健康診断管理を行いたいと考えています。特定の検査種別『C』のみのスタッフを抽出するためのSQL文を教えてください。
- DBには社員ID、名前、検査種別のフィールドがあり、検査種別『C』のみのスタッフを抽出したいです。
- 独学で勉強しているため、処理方法がわかりません。遠回りな処理でも構いませんが、なるべく効率的な方法を教えていただければと思います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Alsharkさん こんにちは。 下記のSQLでできるかと思います。 ※確認はAccessで行いました。 SELECT * FROM T検査 WHERE 社員ID NOT IN (SELECT Distinct 社員ID FROM T検査 WHERE 検査種別<>"C"); お試しください。
その他の回答 (3)
- yamada_g
- ベストアンサー率68% (258/374)
他にもnot existsを使って select 社員ID,名前,検査種別 from テーブル as a where 検査種別 = 'C' and not exists ( select * from テーブル as b where a.社員ID = b.社員ID and b.検査種別 <> 'C'); としてもよさそうです。
お礼
ありがとうございます。 色々な方法があり、勉強になります。
- Tom-3
- ベストアンサー率32% (42/130)
テーブル名は「検査種別」としました。 私ならば下記のように記述します。 SELECT A.社員ID ,A.名前 ,A.検査種別 ,B.社員ID FROM dbo.検査種別 AS A LEFT JOIN ( SELECT BA1.社員ID FROM dbo.検査種別 AS BA1 WHERE 検査種別<>'C' ) AS B ON A.社員ID=B.社員ID WHERE A.検査種別='C' AND ISNULL(B.社員ID,'')='' 見やすくするために前方の空白を全角スペースにしています。 使用される際は全角スペースを半角スペースに変更してください。
お礼
ありがとうございます。 SQL・DB素人なので大変勉強になりました
- bin-chan
- ベストアンサー率33% (1403/4213)
テーブル名が示されてませんが「検査スタッフ」テーブルとします。 select T1.社員ID, T1.名前, T1.検査種別 from 検査スタッフ as T1, (select 社員ID, count(*) as 検査種別数 from 検査スタッフ group by 社員ID) as Ta, (select 社員ID from 検査スタッフ where 検査種別 = 'C') as Tb where T1.社員ID = Ta.社員ID AND Ta.社員ID = Tb.社員ID AND Ta.検査種別数 = 1 ; うーん、なんか美しくない。
お礼
ありがとうございます。 私自身、独学作成コードばかりなので力技的なプログラムが多く 後で見返すのがいやになるものが多いです(笑) SQLは身に付けると大変役立つので是非習得したいと思います。
お礼
ありがとうございます。 無駄が無く、美しく処理動作しました。 いかんせん独学&素人なのでサブクエリの概念が中々難しいです。 でもサブクエリの効果が絶大なので頑張って勉強してみます。 (今まではクエリ→配列代入→クエリ→配列代入→…と処理させてました(汗))