2 votes

Addition des valeurs du deuxième tableau sur la base de l'ID du premier tableau

J'ai déjà posé cette question, mais pour une raison ou une autre, je dois toujours chercher la réponse. Quelqu'un peut-il m'expliquer la solution pour que je puisse enfin "comprendre" ! (merci !)

Table#1 Employees (employeeID, username)
Table#2 Sales (saleID, employeeID, amount)

Question : Dressez la liste de tous les employés, avec le nombre total de ventes qu'ils réalisent.

2voto

Scott Ivey Points 19577

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

2voto

RSolberg Points 17001
select
   e.employeeID
   , e.username
   , count(s.saleID) as'sales count'
   , sum(s.amount) as 'sales $ total'
from
   employees e
left outer join
   sales s
on
   s.employeeID = e.employeeID
group by 
   e.employeeID
   , e.username

1voto

Jonathan Parker Points 4206

Vous dites que vous voulez la somme dans le titre de la question, mais vous dites ensuite que vous voulez le # (nombre) dans le corps de la question.

Si vous souhaitez obtenir la somme, utilisez la fonction SUM de SQL.

select Employees.EmployeeID, TotalSales = SUM(amount)
from Employees LEFT JOIN Sales ON Employees.EmployeeID = Sales.EmployeeID

1voto

GordyII Points 1622

N'est-ce pas aussi simple que cela, en supposant qu'une vente ne peut être réalisée que par un seul employé ?

Select Employees.username, count(Sales.saleID)
From Employees Left Join Sales on Employees.employeeID = Sales.employeeID
Regroupement par nom d'utilisateur de l'employé

0voto

Doc Points 4365
select emp.username
      ,isnull((select count(*)
                 from sales
                where sales.employeeid = emp.employeeid),0) as [number of sales]
  from employees emp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X