2013-04-17 2 views
0

У меня есть две таблицы:не может сделать переход и группу по

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

Я хотел бы получить таблицу, содержащему «PrenomEmploye», «NomEmploye» и столбец «Id AppartL». В этом последнем столбце должно быть количество строк, на которые ссылаются каждый «MatriculeEmploye». Я знаю, что я должен делать смесь между

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

И

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

Но я не знаю, как .. я стараюсь:

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

Но я получаю:

ERROR 1241 (21000): Operand should contain 1 column(s) 

ответ

1

Подзапрос после IN должен возвращать только 1 столбец. Вы возвращаете MatriculeEmploye, COUNT(IdAppartL) так 2 столбца. Ваш запрос должен быть что-то вроде:

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

Обратите внимание, что, что этот запрос будет сливаться сотрудниками, которые имеют ту же (Prénom, Nom) пару, так что вы также можете добавить e.MatriculeEmploye к ВЫБРАТЬ и предложения GROUP BY (GROUP BY 1,2,3, если вы измените свой выбор на SELECT e.MatriculeEmploye, e.Prenom, ...).

1
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;