2016-05-12 4 views
0

Как объединить эти два запроса, не давая мне тот же результат?SQL QUERY- multiple COUNT возвращает неверные (то же) результаты

первый запрос:

select vwemployee.directorateName , count(vwemployeeCourse.employeeId) as t1 

from vwemployee , vwemployeeCourse 

where vwemployee.directorateName = vwemployeeCourse.directorateName 

GROUP BY vwemployee.directorateName 

это второй запрос:

select vwemployee.directorateName , count(vwemployee.directorateName) as t2 

from vwemployee , employeeCourse 

where vwemployee.Id = employeeCourse.employeeId 

GROUP BY vwemployee.directorateName 

я буду использовать комбинированный запрос для создания отчета

первого столбец этого имя директората

кстати, когда я в сочетании них мой сам t1 имел тот же результат, t2, но когда они отделяют это дало мне правильный результат

столбец t1 должен отображать сколько курсов этот конкретный директорат принял, и столбец t2 должен показывать, сколько работника под этого управления приняли эти курсы

так общие столбцы таблицы комбинированного запроса должны быть 3 колонки

+0

У вас действительно есть таблица 'VWemployeeCourse' и' employeeCourse'? или это просто опечатка? –

ответ

0

Если вы намеренно используя employeeCourse вместо vwemployeeCourse в второй запрос я бы использовал следующее. Я использую полное внешнее соединение в случае, если некоторые директораты находятся в одной таблице/представлении, а не в другом. Если это опечатка, и имя должно быть одинаковым в обоих запросах, будет работать внутреннее (регулярное) соединение.

With cteQuery1 As 
(
Select vwemployee.directorateName , Count(vwemployeeCourse.employeeId) as t1 
    From vwemployee 
    Join vwemployeeCourse On vwemployee.directorateName = vwemployeeCourse.directorateName 
    Group By vwemployee.directorateName 
) 
Select cteQuery1.directorateName, t1, t2 
    From 
     (
     Select vwemployee.directorateName , Count(vwemployee.directorateName) as t2 
      From vwemployee 
      Join employeeCourse On vwemployee.Id = employeeCourse.employeeId    
      Group By vwemployee.directorateName 
     ) Query2 
    Full Outer Join cteQuery1 On cteQuery1.directorateName = Query2.directorateName 
0

Вы можете использовать SUM(IF()):

SELECT vwemployee.directorateName, 
    SUM(IF(vwemployee.directorateName = vwemployeeCourse.directorateName),1,0) directorateCount, 
    SUM(IF(vwemployee.Id = employeeCourse.employeeId),1,0) idCount, 
    FROM vwemployee , vwemployeeCourse 
    WHERE vwemployee.directorateName = vwemployeeCourse.directorateName 
     OR vwemployee.Id = employeeCourse.employeeId 
    GROUP BY vwemployee.directorateName 

Примечание: я не проверял это так, возможно, потребуется немного работы.

+0

, потому что вы ссылаетесь на таблицу не в разделе 'FROM' (' employeeCourse', а не 'vwemployeeCourse'). Если это была опечатка от ОП, это должно работать нормально (хотя, возможно, это не так возможно, как возможно). Если на самом деле есть две таблицы, это приведет к таким же неправильным результатам. –

0

Используйте нижеследующий запрос.

Select max(vwemployee.directorateName), sum(t1) as t1, sum(t2) as t2 
(select vwemployee.directorateName , 0 as t1 ,count(vwemployee.directorateName) as t2 
UNION 
select vwemployee.directorateName,count(vwemployeeCourse.employeeId) as t1 , 0 AS t2) 
0

Try ниже запроса:

SELECT vwemployee.directorateName AS dN, COUNT(vwemployeeCourse.employeeId) AS t1, t2 
FROM vwemployee 
    JOIN vwemployeeCourse ON vwemployee.directorateName = vwemployeeCourse.directorateName 
    LEFT JOIN (
      SELECT vwemployee.directorateName AS ecdN, COUNT(vwemployee.directorateName) AS t2 
      FROM vwemployee 
       JOIN employeeCourse ON vwemployee.Id = employeeCourse.employeeId 
      GROUP BY vwemployee.directorateName 
      ) AS EmployeeCount 
     ON dN = ecdN 
GROUP BY vwemployee.directorateName 

Я переформатировать ваш запрос для замены старого стиля синтаксис объединения с ANSI-Присоединяется

Смежные вопросы