2016-05-12 95 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-加入