Concat SQL结果

时间:2013-01-17 05:08:24

标签: sql subquery relational-database concatenation access-vba

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

TABLE: Blocks
+----+--------+
| ID | B_Name |
+----+--------+
| 1  | blockF |
| 2  | blockE |
  .
  .
  .

TABLE: Rooms
+----+------+--------+-------+-----+---------+-------+------+
| ID | B_ID | R_Name | Floor | PAX | E_Wing  | BTC_R | Male |
+----+------+--------+-------+-----+---------+-------+------+
| 1  | 1    | Room 1 | 2     | 10  | TRUE    | TRUE  | TRUE |
| 2  | 1    | Room 2 | 2     | 10  | TRUE    | TRUE  | TRUE |
| 3  | 2    | Room 1 | 1     | 10  | TRUE    | FALSE | FALSE|
  .
  .
  .

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

TABLE: UserGroups
+----+------+-------+-----------+
| ID | R_ID | Group | Occupants |
+----+------+-------+-----------+
| 1  | 1    | SQ 1  | 4         |
| 2  | 1    | SQ 2  | 5         |
  .
  .
  .

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

用户可以根据列中的条件筛选房间 楼层,E_Wing,BTC_R,MALE和B_ID。

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

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

TABLE: Query Result
+--------+--------------+
| R_Name | ComplexQuery |
+--------+--------------+
| Room 1 | 0 / 10       |
| Room 2 | 9 / 10       |
  .
  .
  .
ComplexQuery : "TOTAL OCCUPANTS / PAX"

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

SELECT SUM(UserGroups.Occupants)
FROM UserGroups
WHERE UserGroups.R_ID = DESIRED_ID

SELECT Rooms.PAX
FROM Rooms
WHERE Rooms.ID = DESIRED_ID
  1. 如何通过与过滤条件匹配的每个房间ID迭代查询
  2. 如何将两个查询合并到一个查询中
  3. 我如何将值作为“OCCUPANTS / PAX”连接成一列
  4. 感谢任何帮助。

2 个答案:

答案 0 :(得分: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
祝你好运。

答案 1 :(得分:0)

您还可以在ComplexQuery列中使用连接:

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