Подвыбор в SQL Server
Я хотел бы создать подзаголовок для столбца с определенным счетчиком.
Обычно это не проблема, но в этом случае мне нужен идентификатор для текущего столбца в качестве фильтра.
Например, у меня есть стол. Rooms
:
RoomID Name --------------- 1 Room 1 2 Room 2 3 Room 3
Во всех номерах есть клиенты, например
ClientID RoomID ClientName ------------------------------- 1 1 Client1 2 1 Client2 3 2 Client3
Например, есть таблица ClientUsage
, например
ID ClientID StateID ------------------- 1 1 1 2 2 1 3 3 0
Теперь я хочу показать все комнаты, включая количество всех клиентов (например, StateID = 1
)
Результат должен быть:
ID, RoomID, CountOfClients, CountOfClientsWithStateID = 1
Первые 3 вещи довольно просты, используя это:
SELECT ID, Name, (SELECT COUNT(*) AS Count FROM Client WHERE (RoomID = T1.ID)) AS ClientCount FROM Room AS T1
Но теперь мне нужен Client.ID
качестве ссылки для получения состояния – любые идеи, как это решить?
Попытка с чем-то подобным, но это не работает:
SELECT ID, Name, (SELECT COUNT(*) AS Count FROM Client AS T2 WHERE (RoomID = T1.ID)) AS ClientCount, (SELECT COUNT(*) AS Count FROM ClientUsage WHERE (ClientUsage.ClientID = T2.ID) AND (StateID = 1)) AS ClientFreeCount FROM Room AS T1
заранее спасибо
Вы можете использовать что-то вроде:
SELECT ID, Name, (SELECT COUNT(*) AS Count FROM Client AS T2 WHERE (RoomID = T1.ID)) AS ClientCount, (SELECT COUNT(*) AS Count FROM ClientUsage JOIN Client ON ClientUsage.ClientID = Client.ID WHERE (StateID = 1) AND (Client.RoomID = T1.ID) ) AS ClientFreeCount FROM Room AS T1
SELECT id AS ClientUsageID, roomid AS RoomID, count(cliendid) AS CountClientID, StateID AS CountOfClientsWithStateID FROM room R join client C ON R.RoomID =C.RoomID join ClientUsage CL on C.ClientID =CL.ClientID where StateID=1