Vous souhaitez sélectionner tous les salariés et calculer le nombre de ventes pour chacun d'entre eux. Comme vous souhaitez que tous les salariés figurent dans la liste, vous devez effectuer une sélection dans la table Salariés et effectuer une jointure gauche avec la table Ventes ou une sous-requête dans la table Ventes. Vous obtiendrez ainsi les employés dont le chiffre d'affaires est nul dans les résultats. Dans le cas de la jointure, vous devez regrouper les employés et compter les enregistrements dans la table des ventes. Pour la sous-requête, il n'y a pas de groupement par car votre requête de base ne renverra qu'une ligne par employé.
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.
*/
-- OU --
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
*/
Les résultats de chaque requête sont basés sur l'échantillon de données ci-dessous...
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