Microsoft Access 掲示板

ACCESSのサブクエリについて

7 コメント
views
4 フォロー

ACCESSのサブクエリについて質問です。

画像1

同一グループ内
順位が1位、2位
同一都道府県

この条件で抽出をしたいのです。

画像では、東京になっていますが、千葉の時もあれば、埼玉、福島の時もあります。

SELECT MT_成績.[ID], MT_成績.[グループ], MT_成績.[順位], MT_成績.[都道府県]
WHERE (((MT_成績.[グループ]) In (SELECT グループ FROM MT_成績
    WHERE ( 順位 =1 And 都道府県= ?????? )
       OR ( 順位= 2 And 都道府県= ?????? )
    GROUP BY レースID
    HAVING Count(1) = 2
)))
ORDER BY MT_成績.[グループ]

同一都道府県は、クエリでどのように表現するのでしょうか?

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

hideki
作成: 2020/10/19 (月) 12:05:13
最終更新: 2020/10/19 (月) 12:27:00
通報 ...
1
hatena 2020/10/19 (月) 15:00:06 修正

同一グループ内で順位1、2が同一都道府県のレコードを抽出したいということですよね。

いいかえると、
同一グループかつ同一都道府県のレコード同士を比較して片方が1位もう一方が2位、または片方が2位もう一方が1位のレコードを抽出すればいいということです。
この条件ならサブクエリを使う必要はないです。

「同一グループかつ同一都道府県のレコード同士を比較」の部分はグルーブと都道府県で自己結合すればOKです。

SELECT 
    a.*
FROM
    MT_成績 AS a INNER JOIN MT_成績 AS b
     ON a.都道府県 = b.都道府県
    AND a.グループ = b.グループ
WHERE
    a.順位 = 1 AND b.順位 = 2
    OR 
    a.順位 = 2 AND b.順位 = 1
ORDER BY a.グループ, a.順位;
2
hideki 2020/10/19 (月) 18:10:45 09c37@96514

できました。
いつも正確な回答ありがとうございます。
本当に感謝します。
ありがとうございました。

3
hideki 2020/10/19 (月) 18:18:15 09c37@96514

hatena様

図々しいですが、もう一点、ご教示をお願いします。

https://gyazo.com/1faca64f1d679d0793248befd1696ae8

1位、2位は表示できました。

https://gyazo.com/574acf763874b19bbdf18ce5faf397ec

条件を満たしたグループ全部を表示させたい場合はどのようにするのでしょうか?
教えていただいたコードを自分なりに改良したのですが、クエリが何も表示されなくなります。
本当にお手数かと思いますが、ご教示をお願いします。

4

画像はリンクではなくアップロードして直接表表示させることかできますので、それをご利用ください。
画像1

5
hideki 2020/10/19 (月) 21:25:20 09c37@96514

画像1

失礼しました。
以後、気をつけます。

何卒宜しくお願い致します。

6

前のクエリでグループだけ表示させるようにして、DISTINCTで重複を排除します。
(デザインビューでは「固有の値」を「はい」に設定する)

SELECT 
    DISTINCT a.グループ
FROM
    MT_成績 AS a INNER JOIN MT_成績 AS b
     ON a.都道府県 = b.都道府県
    AND a.グループ = b.グループ
WHERE
    a.順位 = 1 AND b.順位 = 2
    OR 
    a.順位 = 2 AND b.順位 = 1;

このクエリ(Q_成績)と元の MT_成績 をグループで結合したクエリを作成します。

SELECT
  a.*
FROM
  MT_成績 AS a INNER JOIN Q_成績 AS b
  ON a.グループ = b.グループ;

サブクエリで一つにまとめるなら、下記になります。

SELECT
  a.*
FROM
  MT_成績 AS a INNER JOIN
  (
    SELECT 
      DISTINCT a.グループ
    FROM
      MT_成績 AS a INNER JOIN MT_成績 AS b
      ON a.都道府県 = b.都道府県
      AND a.グループ = b.グループ
    WHERE
      a.順位 = 1 AND b.順位 = 2
      OR 
      a.順位 = 2 AND b.順位 = 1 
  ) AS b
  ON a.グループ = b.グループ;
7
hideki 2020/10/19 (月) 22:37:43 09c37@96514

hatena様

本当にありがとうございました。
感謝いたします。