我对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
感谢任何帮助。
答案 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