0

特定の部屋ごとに合計でいくつのキーがあり、特定の部屋ごとにいくつのキーが現在サインアウトされているかを示すクエリを含むDBがあります。部屋ごとにいくつ利用できるかを示す3番目のクエリを作成したいと思います。

アクセスファイル: http: //jumpshare.com/b/k7pEg4

クエリ1(部屋ごとのキー)

SELECT r.room_name, count(r.room_id) AS Key_Count
FROM keys AS k 
INNER JOIN rooms AS r ON r.room_id = k.room_id
GROUP BY r.room_id, r.room_name
ORDER BY 2 DESC;

クエリ2(KPRサインアウト)

SELECT r.room_name, Count(r.room_id) AS Key_Count
FROM rooms AS r 
INNER JOIN (keys AS k 
INNER JOIN signin AS s ON k.key_id = s.key_id) ON r.room_id = k.room_id
WHERE (((s.[return_date]) Is Null))
GROUP BY r.room_name, r.room_id
ORDER BY 2 DESC;

これは、クエリ1と2の結果です。RoomFY218に合計8つのキーがあり、現在2つのキーがサインアウトしている場合。クエリを組み合わせて、この部屋に6つのキーが残っていることを教えてもらえますか。そうでない場合、どうすればこの結果を得ることができますか。

ここに画像の説明を入力してください

これらは私のテーブルと関係です:

ここに画像の説明を入力してください

4

2 に答える 2

2

これはあなたが望むものでなければなりません:

SELECT r.room_name, Count(k.key_id) AS Key_Count
FROM rooms AS r
INNER JOIN keys AS k ON r.room_id = k.room_id 
WHERE k.key_id NOT IN (
    SELECT k2.key_id
    FROM keys AS k2
    INNER JOIN signin AS s ON k2.key_id = s.key_id
    WHERE s.[return_date] Is Null)
GROUP BY r.room_name
ORDER BY 2 DESC
于 2013-01-12T09:15:42.920 に答える
0

次のようなサブクエリを使用できます。

SELECT
r.room_name,
Count(*) -
(
  SELECT Count(*)
  FROM keys AS k2
  INNER JOIN signin s2
  ON s2.key_id = k2.key_id
  WHERE r.room_id = k2.room_id
) AS AvailableKeys
FROM rooms AS r
LEFT JOIN keys AS k
ON r.room_id = k.room_id
GROUP BY r.room_name, r.room_id
于 2013-01-12T09:03:57.493 に答える