我正在尝试返回一个用户或调查员所关联的所有房间的列表。我也想只包括与超过一个房间相关的人。
我尝试了以下查询
SELECT [OCCUPANT], [INVESTIGATOR], [ROOM NUMBER], [ROOM SUBUSE], COUNT([OCCUPANT]), COUNT([INVESTIGATOR])
FROM [FACILITIES MANAGEMENT SCHEDULE]
GROUP BY [OCCUPANT], [INVESTIGATOR], [ROOM NUMBER], [ROOM SUBUSE]
HAVING (COUNT([OCCUPANT]) > 1 OR COUNT([INVESTIGATOR]) > 1);
,它返回的结果如下
但是有了这样的数据
这似乎不包括微博蔡或他的房间7148-*。显然,这是因为该空间中存在的他的计数不大于1,但是是否有一种方法可以重新格式化我的查询以获得我想要的数据?
谢谢你,奥特曼
发布于 2015-08-07 19:56:09
GROUP BY
和HAVING
是正确的主意,但您只需按房间信息分组即可。然后使用HAVING
筛选所需的内容:
SELECT [ROOM NUMBER], COUNT([OCCUPANT]), COUNT([INVESTIGATOR])
FROM [FACILITIES MANAGEMENT SCHEDULE]
GROUP BY [ROOM NUMBER]
HAVING (COUNT([OCCUPANT]) > 1 OR COUNT([INVESTIGATOR]) > 1);
我不知道[ROOM SUBUSE]
是否感兴趣。这还假设在不使用字段时,OCCUPANT
和INVESTIGATOR
具有NULL
值(与某些类型的空格相反)。
发布于 2015-08-07 20:02:33
您可以使用2 where exists
填充正确的数据集,如下所示:
`SELECT [OCCUPANT], [INVESTIGATOR], [ROOM NUMBER], [ROOM SUBUSE], COUNT([OCCUPANT]), COUNT([INVESTIGATOR])
FROM [FACILITIES MANAGEMENT SCHEDULE] Out
WHERE Exists (
SELECT 'O'
FROM [FACILITIES MANAGEMENT SCHEDULE] ino
WHERE out.occupant=ino.occupant
GROUP BY inn.occupant
HAVING count(ino.occupant) >1)
or exists (
SELECT 'I'
FROM [FACILITIES MANAGEMENT SCHEDULE] ini
WHERE out.investigator=ini.investigator
GROUP BY ini.investigator
HAVING count(ini.investigator) >1)
GROUP BY [OCCUPANT], [INVESTIGATOR], [ROOM NUMBER], [ROOM SUBUSE];`
https://stackoverflow.com/questions/31885594
复制相似问题