0

我对 SQL 很陌生,我正在使用 MS Access 的 ListBox 组件,它需要一个查询来显示数据。以下是进行查询所涉及的表:

表:块
+----+--------+
| 身份证 | B_姓名 |
+----+--------+
| 1 | 块F |
| 2 | 块E |
  .
  .
  .

表:房间
+----+------+--------+--------+-----+---------+---- --+--------+
| 身份证 | B_ID | R_名称 | 地板 | 帕克斯 | 翼翼 | 比特币_R | 男 |
+----+------+--------+--------+-----+---------+---- --+--------+
| 1 | 1 | 房间 1 | 2 | 10 | 真的 | 真的 | 真的 |
| 2 | 1 | 房间 2 | 2 | 10 | 真的 | 真的 | 真的 |
| 3 | 2 | 房间 1 | 1 | 10 | 真的 | 错误 | 错误|
  .
  .
  .

其中 B_ID 是块的外键,显示块和房间之间的一对多关系,PAX 是最大空缺数量。

表:用户组
+----+------+--------+------------+
| 身份证 | R_ID | 集团 | 住户 |
+----+------+--------+------------+
| 1 | 1 | 平方 1 | 4 |
| 2 | 1 | 平方 2 | 5 |
  .
  .
  .

其中 R_ID 是房间的外键,显示房间和用户组之间的一对多关系

用户可以根据 Floor、E_Wing、BTC_R、MALE 和 B_ID 列中的条件过滤房间。

我的问题是如何根据过滤条件和结果表显示所有房间,例如:

*例如当过滤条件为 B_ID = 1*

表:查询结果
+--------+--------------+
| R_名称 | 复杂查询 |
+--------+--------------+
| 房间 1 | 0 / 10 |
| 房间 2 | 9 / 10 |
  .
  .
  .
复杂查询:“TOTAL OCCUPANTS / PAX”

到目前为止我取得的进展是单独的查询

选择总和(用户组。占用者)
来自用户组
WHERE UserGroups.R_ID = DESIRED_ID

选择房间.PAX
从房间
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)) 作为 ComplexQuery

于 2013-01-17T16:41:58.480 回答