Вы хотите выбрать всех сотрудников и рассчитать их количество продаж для каждого. Поскольку вы хотите, чтобы все сотрудники были в списке, вы должны выбрать из таблицы «Сотрудники» и либо оставить присоединение к таблице продаж, либо выполнить подзапрос к таблице продаж. Это даст вам сотрудников с нулевыми продажами в результатах. В случае объединения вам необходимо сгруппировать по сотруднику и сосчитать записи в таблице продаж. Для подзапроса нет группы по, потому что ваш базовый запрос вернет только 1 строку на сотрудника.
select Employees.EmployeeID,
Employees.UserName,
CountOfSales = COUNT(SaleID)
from Employees LEFT JOIN
Sales ON Employees.EmployeeID = Sales.EmployeeID
group by Employees.EmployeeID,
Employees.UserName
/*
EmployeeID UserName CountOfSales
----------- ---------- ------------
2 bill 1
3 larry 0
1 scott 2
Warning: Null value is eliminated by an aggregate or other SET operation.
*/
- ИЛИ -
select E.*,
CountOfSales = (select count(*)
from sales
where EmployeeID = E.EmployeeID)
from Employees E
/*
employeeID username CountOfSales
----------- ---------- ------------
1 scott 2
2 bill 1
3 larry 0
*/
Результаты каждого запроса основаны на приведенных ниже примерах ...
create table Employees (employeeID int , username varchar(10))
create table Sales (saleID int , employeeID int , amount smallmoney)
go
insert Employees values (1, 'steve'), (2, 'bill'), (3, 'larry')
insert Sales values (1, 1, 23), (2,1,33), (3,2,0)
go