Microsoft Access 掲示板

ACCESSのサブクエリについて

2 コメント
views
4 フォロー

お世話になります。

同一グループで、順位1位~順位7位中で、フラグ(▲)が入力されているグループを抽出したいのです。
営業1は、順位1、順位3、順位6、の横にグラグ(▲)が入力されているので、抽出する。

営業2は、順位1、順位3、順位8、の横にグラグ(▲)が入力されているので、抽出しない。

このようなクエリは、サブクエリになると思うのですが、
どのように記載するのでしょうか?

SELECT * FROM テーブル1
WHERE 部署 IN
(
    SELECT 部署 FROM テーブル1
    WHERE ( 順位 = 1 AND LEN(フラグ)>0)
       OR ( 順位 = 2 AND LEN(フラグ)>0)
       OR ( 順位 = 3 AND LEN(フラグ)>0)
       OR ( 順位 = 4 AND LEN(フラグ)>0)
       OR ( 順位 = 5 AND LEN(フラグ)>0)
       OR ( 順位 = 6 AND LEN(フラグ)>0)
       OR ( 順位 = 7 AND LEN(フラグ)>0)

    GROUP BY 部署
    HAVING Count(1) = 7
);

↑何も抽出されません。

SELECT * FROM テーブル1
WHERE 部署 IN
(
    SELECT 部署 FROM テーブル1
    WHERE ( 順位 = 1 OR LEN(フラグ)>0)
       OR ( 順位 = 2 OR LEN(フラグ)>0)
       OR ( 順位 = 3 OR LEN(フラグ)>0)
       OR ( 順位 = 4 OR LEN(フラグ)>0)
       OR ( 順位 = 5 OR LEN(フラグ)>0)
       OR ( 順位 = 6 OR LEN(フラグ)>0)
       OR ( 順位 = 7 OR LEN(フラグ)>0)

    GROUP BY 部署
    HAVING Count(1) = 7
);画像1

↑は構文エラーです。

お手数ですが、ご教示をお願いしいます。

hideki
作成: 2021/07/09 (金) 19:55:52
通報 ...
1
  • 順位1位 ~ 順位7位中 いずれかのレコード でフラグが立っている
  • 順位8位以下 全てのレコード でフラグが立っていない
    ( 8位以下が存在しないグループも含む )

両方の条件を満たしているグループを抽出したい
という解釈でいいでしょうか。

SELECT * FROM テーブル1
WHERE 部署 IN 
(
    SELECT 部署 FROM テーブル1
    GROUP BY 部署
    HAVING Sum( IIf( 順位 Between 1 And 7 AND フラグ Is Not Null, 1, 0 ) ) > 0
       AND Sum( IIf( 順位 > 7             AND フラグ Is Not Null, 1, 0 ) ) = 0
);
2
hideki 2021/07/09 (金) 22:26:09 a106b@96514

ご提示いただいたコードでできました。
ありがとうございました。