2014-03-13 33 views
0

我有兩個表稱爲:EmployeeTable & TaskAssignmentTable。 它們看起來像這樣: tables formation
TaskAssignmentTable顯示分配給員工的任務。爲了將新任務分配給員工,我希望將任務數量分配給不同的人員,然後將任務分配給分配最少任務的人員。
問題:在這個表的TaskAssignmentTable結果中使用正常計數(): enter image description here
但是我想要的是某些表之間的聯接,它顯示了第一個表中存在的行的計數並且第二個表中缺少的行數等於count 0像這樣的:SQL:計數行中不存在的表

​​

那麼這將是SQL查詢來連接表,做這樣的事情? (可選:由於我使用C#Linq-2-SQL,如果有人可以爲此編寫LINQ語法,我將不勝感激)。

+0

向我們展示您嘗試過的東西? – Sadique

+0

我不知道如何使用連接表和第二張表一起計數 – VSB

+0

FKemployeeid是一個int還是一個字符串?你能提供一個sqlfiddle – giammin

回答

2

的LINQ版本你需要一個LEFT OUTER JOIN基於要存在於第一個錶行的語句,但不是第二:

SELECT EmployeeID, Name, Count(TaskID) as CNT 
FROM EmployeeTable e 
LEFT JOIN TaskAssignmentTable t 
    ON e.employeeID = t.FKEmployeeID 
GROUP BY EmployeeID, Name 
+0

是的,我可以,但無法找到您的問題的鏈接 –

+0

我已經回答了您的C#問題! –

1

嘗試

SELECT EmployeeID, Name, Count(TaskID) as CNT 
FROM EmployeeTable emp 
LEFT JOIN TaskAssignmentTable task on emp.employeeID = task.FKEmployeeID 
GROUP BY EmployeeID, Name 
+0

我測試了你的語句,但它不返回count = 0的任何行。我的意思是它仍然沒有在第二張表中缺席的行。 – VSB

+0

我的片段是:'選擇emp.id,品名,數(taskAssignment.taskID)爲CNT FROM員工EMP JOIN taskAssignment上emp.id = taskAssignment.FKEmployeeID GROUP BY emp.id,Name' – VSB

+0

用左手試試吧加入。更新了我的答案。 – DNac

0

您需要OUTER JOIN兩個表(在你的情況下,LEFT JOIN):

SELECT EmployeeID, Name, Count(TaskID) as CNT 
FROM EmployeeTable emp 
LEFT JOIN TaskAssignmentTable task on emp.employeeID = task.FKEmployeeID 
GROUP BY EmployeeID, Name 
0

對於您必須使用左外連接

SELECT EmployeeID, Name, Count(TaskID) as CNT 
FROM EmployeeTable emp 
LEFT OUTER JOIN TaskAssignmentTable task on emp.employeeID = task.FKEmployeeID 
GROUP BY EmployeeID, Name 

而且該查詢這個樣子的

var employees = from emp in dbContext.Employees 
       join task in dbContext.TaskAssignmentTable 
       on emp.employeeID equals task.FKEmployeeID 
       into tEmpWithTask 
       from tEmp in tEmpWithTask.DefaultIfEmpty() 
       group tEmp by new { emp.EmployeeID, emp.Name } into grp 
       select new { 
        grp.Key.EmployeeID, 
        grp.Key.Name, 
        grp.Count(t=>t.TaskID != null) 
       }; 
+0

@VSB - 檢查我更新的答案。增加了Linq查詢。 –