在sql中的count内应用where子句 选择 房间,建筑, 将(房间、房间)计入总公寓, 将(房间.房间)计算为公寓占用 从…起 房间 哪里 (((Rooms.AssetType)'LC')) 分组 房间、建筑;

在sql中的count内应用where子句 选择 房间,建筑, 将(房间、房间)计入总公寓, 将(房间.房间)计算为公寓占用 从…起 房间 哪里 (((Rooms.AssetType)'LC')) 分组 房间、建筑;,sql,Sql,我想计算Rooms.RoomsWhereRooms.accumped=True(ApartmentsOccupied)但当我将此子句放入sql时,它也会将Where应用到TotalApartments列中,您可以这样做 SELECT Rooms.Building, Count(Rooms.Room) AS TotalApartments, Count(Rooms.Room) AS ApartmentsOccupied FROM Rooms WHERE

我想计算
Rooms.Rooms
Where
Rooms.accumped=True
ApartmentsOccupied
)但当我将此子句放入sql时,它也会将Where应用到TotalApartments列中,您可以这样做

SELECT 
    Rooms.Building, 
    Count(Rooms.Room) AS TotalApartments, 
    Count(Rooms.Room) AS ApartmentsOccupied
FROM 
    Rooms
WHERE 
    (((Rooms.AssetType) <> 'LC')) 
GROUP BY 
    Rooms.Building;
选择
建筑,
将(房间)计算为总公寓,
总计(占用时的情况=真,然后为1,否则为0结束)作为公寓占用
从…起
房间
哪里
资产类型“LC”
分组
建筑;

您可以将一些逻辑移到CASE语句中以进行条件摘要:

SELECT 
    Building, 
    Count(Room) AS TotalApartments, 
    SUM(CASE WHEN Occupied = True THEN 1 ELSE 0 END) AS ApartmentsOccupied
FROM 
    Rooms
WHERE 
    AssetType <> 'LC' 
GROUP BY 
    Building;
或者,在某些sql方言中,“True”值为1,因此对于占用的计数,您可以这样做:

Sum(1) AS TotalApartments

将(案例室。如果为true,则为1个房间)计算为ApartmentsOccuped
。当然,这取决于“sql”是什么“sql”。请尝试使用having COUNT(Rooms.ROOM)>0或类似于这些行的值,而不是where。
Sum(1) AS TotalApartments
Sum(Rooms.Occupied) AS ApartmentsOccupied