Помогите с предложением GROUP BY - PullRequest
2 голосов
/ 17 апреля 2011

нужна ваша помощь с предложением GROUP BY.

У меня есть две таблицы: Менеджеры и Клиенты (я упростил вопрос).

Managers:
managerId int PK,
ManagerName nvarchar(50)

и

Clients:
ClientId int,
ClientName nvarchar(50),
ManagerId int, WhenAdded datetime

Я храню список менеджеров в таблице менеджеров.У каждого клиента из таблицы Clients есть соответствующий менеджер.

Я хочу запрос sql, который возвращает следующую таблицу:

ManagerName nvarchar(50),
NumberOfClients int

Моя проблема: если у менеджера нет клиента (ов),Запрос Sql не включает ManagerName в итоговую таблицу.

Я пробовал этот запрос:

SELECT M.ManagerName, COUNT(*) 
FROM
Clients AS C left join Managers AS M 
ON
C.ManagerId = M.ManagerId
GROUP BY 
M.ManagerName

Второй вопрос

То же, что ипервый вопрос, но если я хочу добавить предложение where в поле WhenAdded в Клиентах).Запрос должен возвращать ManagerName и NumberOfClients, даже если NumberOfClients=0.

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Вы можете использовать это:

SELECT ManagerName, (SELECT Count(ClientID) FROM Clients C WHERE
    C.ManagerID=M.ManagerID) As NumberOfClients FROM Managers M;

или это:

SELECT ManagerName, Count(C.ClientID) As NumberOfClients FROM Managers M
    LEFT JOIN Clients C ON M.ManagerID=C.ManagerID GROUP BY M.ManagerID,
    M.ManagerName;

Проблема с вашим запросом в том, что вы используете таблицу Clients в качестве базовой таблицы.

Для второго вопроса вы можете использовать это:

SELECT ManagerName, (SELECT Count(ClientID) FROM Clients C WHERE
    WhenAdded<DATEADD(day, 1, GETDATE()) AND M.ManagerID=C.ManagerID) As
    NumberOfClients FROM Managers M;
0 голосов
/ 17 апреля 2011

Это должно работать. Не очень оптимизированный, хотя!

select m.ManagerName , count(c.ManagerId) from Managers m, Clients c where 
m.ManagerId = c.ManagerId group by c.ManagerId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...