1つにまとめると、SQLの計算量・コストがかかりそうだけど、
不合格を1にして、合格を0でSUM合計をとります。
SELECT T_MOTO.名前, T_MOTO.合否, T_MOTO.科目, (SELECT Sum(IIf(T_TEMP.[合否]="不合格",1,0)) FROM TABLE_A AS T_TEMP WHERE T_TEMP.名前 = T_MOTO.名前) AS 不合格の合計
FROM TABLE_A AS T_MOTO;
↑のクエリーで下記↓のように不合格の数をカウントで来たので
↑から、不合格が0の人(合格だけの人を取り出すと)
SELECT T_MOTO.名前, T_MOTO.合否, T_MOTO.科目, (SELECT Sum(IIf(T_TEMP.[合否]="不合格",1,0)) FROM TABLE_A AS T_TEMP WHERE T_TEMP.名前 = T_MOTO.名前) AS 不合格の合計
FROM TABLE_A AS T_MOTO
WHERE ((((SELECT Sum(IIf(T_TEMP.[合否]="不合格",1,0)) FROM TABLE_A AS T_TEMP WHERE T_TEMP.名前 = T_MOTO.名前))=0));
かなぁ。
う?ん、なんか、もっとスッキリするような感じがするけど、
あとは、識者・SQLの魔術師さんにおまかせします。
.
叩き台、ヒントとなれば幸いです。
select * from 履歴 as a where not exists (select b.人物 from 履歴 as b where b.結果 = '不合格' and b.人物 = a.人物)
▽3
●
匿名回答3号 ベストアンサー |
一例
SELECT 氏名 FROM テーブル GROUP BY 氏名 HAVING SUM(IIF(結果="不合格", 1, 0)) = 0 ;