Access查询逻辑计算:如何按房间统计床位状态?
Access房间状态汇总查询方案
原始数据
假设你的表名为BedStatus,原始数据如下:
| Room-Bed | Status |
|---|---|
| 100-A | Available |
| 100-B | Occupied |
| 101-A | Available |
| 101-B | Available |
| 102-A | Occupied |
| 102-B | Occupied |
需求逻辑
- 房间内任意床位为
Occupied,房间状态即为Occupied - 房间所有床位均为
Available,房间状态才为Available
实现查询
在Access中可以通过分组查询结合条件判断实现,以下是两种可行的SQL查询方案:
方案一:利用文本排序特性简化判断
利用Occupied在文本排序中优先级高于Available的特性,直接取每个房间状态的最大值:
SELECT Left([Room-Bed], InStr([Room-Bed], "-") - 1) AS Room, Max([Status]) AS Status FROM BedStatus GROUP BY Left([Room-Bed], InStr([Room-Bed], "-") - 1);
逻辑说明:文本排序中Occupied的首字母O在A之后,Max函数会优先返回Occupied,刚好匹配需求——只要有一个床位占用,房间状态就为占用。
方案二:用条件判断明确逻辑
如果需要更直观的逻辑表达,可通过统计占用床位数量来判断:
SELECT Left([Room-Bed], InStr([Room-Bed], "-") - 1) AS Room, IIF(SUM(IIF([Status]='Occupied',1,0))>0, 'Occupied', 'Available') AS Status FROM BedStatus GROUP BY Left([Room-Bed], InStr([Room-Bed], "-") - 1);
逻辑说明:先统计每个房间内Occupied床位的数量,只要数量大于0,房间状态设为Occupied,否则为Available。
查询结果
执行上述任一查询后,将得到以下房间级汇总结果:
| Room | Status |
|---|---|
| 100 | Occupied |
| 101 | Available |
| 102 | Occupied |
内容的提问来源于stack exchange,提问作者cbk
相关产品推荐
相关产品推荐

