Microsoft Access 掲示板

副クエリを使ったSQLを作りたい / 4

6 コメント
views
4
ヘンリー 2025/02/20 (木) 10:14:06 df814@74a06

皆様、ご回答ありがとうございます。
おかげさまでできました。

hatena様、副クエリの作り方を教えていただきありがとうございます。

sk様、"00001"が決め打ちなのは、M_部屋がの構成が以下の通りだからです。
【M_部屋】
物件ID
棟ID
フロアID
部屋ID


部屋IDは、棟IDごと、フロアIDごとに、"00001"、"00002"…とあり、
棟ごとフロアごとの部屋数ではなく、棟ごとの部屋数だけを表示したいためです。

朱様
hatena様の例をもとに、1から作り直してみたので、
エラーの原因は後ほど確認してみます。

ユーザレビューを行った結果、少し仕様が変わり、M_部屋にデータがなくても、
棟名と棟ごとのフロア数は表示してほしいとの事でした。
出来上がったものを掲載しておきます。

SELECT
  M_棟.物件ID, M_棟.棟名, Q_F.[フロア数], Q_R.部屋数
FROM
  (M_棟 INNER JOIN
     (
      SELECT M_棟.物件ID, M_棟.棟ID, M_棟.棟名, Count(M_フロア.[フロアID]) AS フロア数
      FROM M_棟
      INNER JOIN M_フロア
      ON M_棟.物件ID = M_フロア.物件ID AND M_棟.棟ID = M_フロア.棟ID
      GROUP BY M_棟.物件ID, M_棟.棟ID, M_棟.棟名
     ) AS Q_F
   ON M_棟.物件ID = Q_F.物件ID AND M_棟.棟ID = Q_F.棟ID
  )
  LEFT JOIN
     (
      SELECT M_部屋.物件ID, M_フロア.棟ID, M_棟.棟名, M_部屋.[フロアID], Count(M_部屋.部屋ID) AS 部屋数
      FROM
      (M_棟 INNER JOIN M_フロア ON M_棟.物件ID = M_フロア.物件ID AND M_棟.棟ID = M_フロア.棟ID)
      INNER JOIN M_部屋
      ON M_フロア.物件ID = M_部屋.物件ID AND M_フロア.棟ID = M_部屋.棟ID AND M_フロア.[フロアID] = M_部屋.[フロアID]
      WHERE M_部屋.[フロアID]='00001'
      GROUP BY M_部屋.物件ID, M_フロア.棟ID, M_棟.棟名, M_部屋.[フロアID]
     ) AS Q_R
   ON M_棟.物件ID = Q_R.物件ID AND M_棟.棟ID = Q_R.棟ID
WHERE M_棟.物件ID='00165'

通報 ...
  • 5

    棟ごとフロアごとの部屋数ではなく、棟ごとの部屋数だけを表示したいためです。

    つまり次の SQL と同等の実行結果を得られればよい、ということでしょうか。

    SELECT [M_棟].[物件ID], 
           [M_棟].[棟ID], 
           [M_棟].[棟名称], 
           (SELECT Count(*) 
            FROM [M_フロア] 
            WHERE [M_フロア].[物件ID] = [M_棟].[物件ID] 
              AND [M_フロア].[棟ID] = [M_棟].[棟ID]) AS [フロア数], 
           (SELECT Count(*) 
            FROM [M_部屋]
            WHERE [M_部屋].[物件ID] = [M_棟].[物件ID] 
              AND [M_部屋].[棟ID] = [M_棟].[棟ID]) AS [部屋数] 
    FROM [M_棟] 
    WHERE [M_棟].[物件ID] = "00165" 
    ORDER BY [M_棟].[物件ID], 
             [M_棟].[棟ID];