2014-11-14 2 views
1

Я хотел бы создать подзадачу для столбца с определенным счетчиком.Subselect в 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 

Заранее спасибо

ответ

1

Вы могли бы использовать что-то вроде:

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 
+0

Спасибо за ваш ответ ! Но результат легок, но странный. Теперь у меня есть результат: Имя комнаты, CountofClients, CountOfClientsWithStateID = 1 -> Room1, 16, 831 (это невозможно, оно должно быть не более 16) - в моей таблице ClientState есть ровно столько же счетчиков. Есть идеи? Для ВСЕХ номеров его 831 (но есть еще только 512 клиентов) – derdida

+0

Я вижу ... Извините, произошла ошибка. Я собираюсь отредактировать его –

+0

У него не было условия для второго подзаголовка. Не могли бы вы попробовать сейчас? –

1
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 
Смежные вопросы