2014-10-07 17 views
1
SELECT 
    Rooms.Building, 
    Count(Rooms.Room) AS TotalApartments, 
    Count(Rooms.Room) AS ApartmentsOccupied 
FROM 
    Rooms 
WHERE 
    (((Rooms.AssetType) <> 'LC')) 
GROUP BY 
    Rooms.Building; 

我想算Rooms.RoomRooms.Occupied = TrueApartmentsOccupied),但是當我把這個條款列入我的SQL它也適用在哪裏的TotalApartments列適用,如果在SQL計數範圍內第

+1

'計數(案件房間。房間時,真的,然後1結束)AS ApartmentsOccupied'。當然取決於什麼「sql」是「sql」。 – mustaccio 2014-10-07 19:00:33

+1

而不是在哪裏,嘗試使用COUNT(Rooms.ROOM)> 0或沿着這些線的東西。 – RazorSky 2014-10-07 19:00:50

回答

0

你可以這樣做

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; 
1

您可以將一些邏輯到CASE語句進行條件摘要:

SELECT 
    Rooms.Building, 
    Count(Rooms.Room) AS TotalApartments, 
    Sum(CASE WHEN Rooms.Occupied = True THEN 1 ELSE 0 END) AS ApartmentsOccupied 
FROM 
    Rooms 
WHERE 
    (((Rooms.AssetType) <> 'LC')) 
GROUP BY 
    Rooms.Building; 

我不知道把我的頭頂部,但您可能需要更改計的款項,以及:

Sum(1) AS TotalApartments 

而且交替,在一些SQL方言的「真」值是1,所以你可以得到這樣的事情佔用的計數:

Sum(Rooms.Occupied) AS ApartmentsOccupied