Question

I have two tables :

GererLocationAppart(IdAppartL, MatriculeEmploye)
Employe(MatriculeEmploye, PrenomEmploye, NomEmploye, NumeroTelephoneEmploye)

I would like to get a table wich contains "PrenomEmploye", "NomEmploye" and a column "Id AppartL". This last column should have the number of lines that every "MatriculeEmploye" are referring to. I know that i should do a mixture between

Select Distinct PrenomEmploye, NomEmploye, IdAppartL
From Employe E1, GererLocationAppart G1
Where E1.MatriculeEmploye=G1.MatriculeEmploye;

And

SELECT MatriculeEmploye, COUNT(IdAppartL)
FROM GererLocationAppart
GROUP BY MatriculeEmploye;

But i don't know how.. I try :

Select Distinct PrenomEmploye, NomEmploye
From Employe
Where MatriculeEmploye in
(SELECT MatriculeEmploye, COUNT(IdAppartL)
FROM GererLocationAppart
GROUP BY MatriculeEmploye);

But I get :

ERROR 1241 (21000): Operand should contain 1 column(s)
Was it helpful?

Solution

The subquery after IN must return only 1 column. You are returning MatriculeEmploye, COUNT(IdAppartL) so 2 columns. Your query should be something like:

Select e.PrenomEmploye, e.NomEmploye, COUNT(g.IdAppartL)
From Employe e 
  INNER JOIN GererLocationAppart g ON g.MatriculeEmploye=e.MatriculeEmploye
GROUP BY 1,2;

Note that that this query will merge employees that have the same (Prenom, Nom) couple, so you may also want to add e.MatriculeEmploye to the SELECT and GROUP BY clause (GROUP BY 1,2,3 if you change your select to SELECT e.MatriculeEmploye, e.Prenom, ...).

OTHER TIPS

SELECT
 E1.PrenomEmploye
,E1.NomEmploye
,E1.IdAppartL
,COUNT(G1.IdAppartL) as CountMatriculeEmploye
From Employe E1
JOIN GererLocationAppart G1 ON E1.MatriculeEmploye=G1.MatriculeEmploye
GROUP BY E1.MatriculeEmploye;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top