質問: SQLの条件の書き方について。 例えば、下記サンプルで、一度でも不合格を含む人物を外して、 合格履歴しかない人物のみの履歴を抜き出す構文を教えてください。 A 合格 国語 A 合格 算数 B 不合格 国語 B 合格 算数 where 結果<>不合格 だと、Bさんの合格履歴(算数)があがってきてしまいます。 Bさんは一度不合格履歴があるので、Bさん自体の履歴全て(合格履歴も)を抜き出したくないです。 ちなみにAccessです。SQL文を直接書いて抽出しています。
回答: 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; ↑のクエリーで下記↓のように不合格の数をカウントで来たので ![f:id:ken3memo:20121015143624j:image ↑から、不合格が0の人(合格だけの人を取り出すと) !f:id:ken3memo:20121015143625j:image 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の魔術師さんにおまかせします。 . 叩き台、ヒントとなれば幸いです。