2013-04-10 56 views
0

我需要獲取屬於系統中每個項目內用戶的任務數量。該表是:SQL:統計每個項目中屬於某個用戶的所有任務

項目: ID,名稱

任務: ID,專案編號,受讓人(用戶)

現在我在做這個查詢:

SELECT Projects.ID, Projects.Name, COUNT(*) 
FROM Tasks JOIN Projects ON Tasks.ProjectID = Projects.ID 
WHERE Assignee=1 GROUP BY Projects.ID; 

這隻能部分工作。 IT將返回任務數量,但僅限於爲任務分配給用戶的項目。我希望查詢返回系統中的所有項目,即使未分配任何任務。

我該怎麼做?

謝謝!

回答

3

使用LEFT JOIN代替。

LEFT JOIN的操作與INNER JOIN不同。它所做的是返回左側邊界表的所有記錄,它是Projects它是右側表中是Tasks的匹配還是沒有匹配。

SELECT Projects.ID, Projects.Name, COUNT(Tasks.ProjectID) 
FROM Projects 
     LEFT JOIN Tasks 
      ON Tasks.ProjectID = Projects.ID AND 
       Assignee=1 
GROUP BY Projects.ID; 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

+0

問候,此查詢不起作用。對於根本沒有任務的項目,它會返回1。 – SrgHartman 2013-04-10 12:14:01

+2

哎呀對不起,應該是'COUNT(Tasks.ProjectID)'。請再試一次。 – 2013-04-10 12:14:47

+0

我試圖通過添加另一個左連接子句來解決問題,但它不起作用: SELECT Projects.ID,Projects.Name,COUNT(Tasks.ProjectID),COUNT(Issues.ProjectID)FROM Projects 左加入任務在Tasks.ProjectID = Projects.ID和Tasks.Assignee = 1 LEFT JOIN Issues on Issues.ProjectID = Projects.ID and Issues.Assignee = 1 GROUP BY Projects.ID; 任何想法爲什麼?謝謝! – SrgHartman 2013-04-10 13:10:46

0

如果你需要,你需要RIGHT OUTER JOIN,而不是JOIN的所有項目:

SELECT Projects.ID, Projects.Name, COUNT(Projects.ID) 
FROM Tasks RIGHT OUTER JOIN Projects 
ON Tasks.ProjectID = Projects.ID 
AND Assignee=1 GROUP BY Projects.ID; 
+0

問候,該查詢不起作用。對於根本沒有任務的項目,它會返回1。 – SrgHartman 2013-04-10 12:10:28

+0

編輯,現在應該工作 – 2013-04-10 12:37:44

0

試試這個

SELECT Projects.ID, Projects.Name, COUNT(*) 
FROM Projects JOIN Tasks ON Tasks.ProjectID = Projects.ID 
WHERE Assignee=1 GROUP BY Projects.ID; 
相關問題