2016-05-12 51 views
0

如何结合这两个查询而不给我相同的输出?SQL QUERY-多个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

第二个查询我会使用以下内容。如果一些董事会在一个表/视图中而不是另一个,我使用完整的外部联接。如果是拼写错误,并且名称在两个查询中都应该是相同的,则内部(常规)连接将起作用。

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')。如果这是OP的一个错字,这应该可以正常工作(尽管可能不是性能)。如果真的有两张表,这会产生相同的错误结果。 –

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

试试下面的查询:

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 

我已经重新格式化您的查询,以取代旧式联接语法与如果你是故意使用在employeeCourse代替vwemployeeCourse ANSI-加入