他にもnot existsを使って
select 社員ID,名前,検査種別
from テーブル as a
where 検査種別 = 'C'
and not exists (
select *
from テーブル as b
where a.社員ID = b.社員ID
and b.検査種別 <> 'C');
としてもよさそうです。
テーブル名は「検査種別」としました。
私ならば下記のように記述します。
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,'')=''
見やすくするために前方の空白を全角スペースにしています。
使用される際は全角スペースを半角スペースに変更してください。
テーブル名が示されてませんが「検査スタッフ」テーブルとします。
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
;
うーん、なんか美しくない。
お礼
ありがとうございます。 無駄が無く、美しく処理動作しました。 いかんせん独学&素人なのでサブクエリの概念が中々難しいです。 でもサブクエリの効果が絶大なので頑張って勉強してみます。 (今まではクエリ→配列代入→クエリ→配列代入→…と処理させてました(汗))