0

私は SQL を初めて使用し、データを表示するためにクエリを必要とする MS Access の ListBox コンポーネントを使用しています。クエリを作成するために必要なテーブルは次のとおりです。

表: ブロック
+----+--------+
| | ID | B_名前 |
+----+--------+
| | 1 | ブロック F |
| | 2 | ブロックE |
  .
  .
  .

表: 部屋
+----+------+--------+-------+-----+---------+---- ---+------+
| | ID | B_ID | R_Name | 床 | 床 | パックス | E_ウィング | BTC_R | 男性 |
+----+------+--------+-------+-----+---------+---- ---+------+
| | 1 | 1 | ルーム1 | 2 | 10 | 真 | 真 | 真 |
| | 2 | 1 | ルーム 2 | 2 | 10 | 真 | 真 | 真 |
| | 3 | 2 | ルーム1 | 1 | 10 | 真 | 偽 | いいえ|
  .
  .
  .

ここで、B_ID はブロックと部屋の間の 1 対多の関係を示すブロックへの外部キーであり、PAX は空室の最大量です。

表: ユーザーグループ
+----+--------+-------+-----------+
| | ID | R_ID | グループ | 居住者 |
+----+--------+-------+-----------+
| | 1 | 1 | SQ 1 | 4 |
| | 2 | 1 | 特殊能力 2 | 5 |
  .
  .
  .

ここで、R_ID はルームへの外部キーで、ルームとユーザーグループ間の 1 対多の関係を示します

ユーザーは、Floor、E_Wing、BTC_R、MALE、および B_ID 列の条件に基づいて部屋をフィルター処理できます。

私の質問は、フィルター条件と次のような結果のテーブルに基づいてすべての部屋を表示する方法です。

※例えばフィルター条件がB_ID=1の場合※

表: クエリ結果
+--------+--------------+
| | R_Name | 複雑なクエリ |
+--------+--------------+
| | ルーム1 | 0 / 10 |
| | ルーム 2 | 9 / 10 |
  .
  .
  .
ComplexQuery : "TOTAL OCCUPANTS / PAX"

私がこれまでに行った進歩は、別のクエリです

SELECT SUM(UserGroups.Occupants)
FROM ユーザーグループ
WHERE UserGroups.R_ID = DESIRED_ID

部屋を選択.PAX
FROM ルームズ
WHERE Rooms.ID = DESIRED_ID
  1. フィルタ条件に一致するすべてのルーム ID に対してクエリを繰り返す方法
  2. 両方のクエリを単一のクエリにマージする方法
  3. 値を「OCCUPANTS / PAX」として単一の列に連結するにはどうすればよいですか

どんな助けでも大歓迎です。

4

2 に答える 2

1

あなたの質問を正しく理解していれば、LEFT JOIN、SUM、および GROUP BY を使用する必要があります。これはテストされていないコードです。Access では結合を括弧で囲む必要があると思います。

SELECT R.R_Name, SUM(UG.Occupants) / R.Pax as PercentageOfRoomOccupied
FROM Rooms R
LEFT JOIN UserGroups UG ON R.Id = UG.R_Id
WHERE R.B_ID = 1
GROUP BY R.R_Name, R.Pax

幸運を。

于 2013-01-17T05:17:58.363 に答える
0

ComplexQuery 列に連結を使用することもできます。

CONCAT(ISNULL(SUM(UG.Occupants, 0), ' / ', R.Pax)) as ComplexQuery

于 2013-01-17T16:41:58.480 に答える