2012-06-01 29 views
1

我有一個包含2列的表,比如Empname,DepartmentName,其中一個員工可以在多個部門中工作,反之亦然。 我想寫一個查詢來選擇基於某些部門組合的EmpName。 例如。只在部門1,部門2和部門3下工作的員工(在這種情況下,只應選擇僅在3個部門工作的員工)SQL語句中的問題使用「in」獲取記錄組合

以下是我試過的查詢。

Select EmpName, Count(*) as Total from Emp_Departments where DepartmentName in ('Dept1', 'Dept2', 'Dept3') group by EmpName having Total=3 

問題是,任何工作任何上述部門和他們的總數的員工是3,它也返回他們的行。 請建議我怎樣才能得到唯一的組合。

+0

什麼是你的表的結構? 'EmpName'是唯一的嗎? 「EmpName」,「DepartmentName」組合是否也是唯一的? –

+0

是的EmpName和部門的組合是獨特的 – AjayR

+0

單獨的'EmpName'如何?是獨一無二的嗎? –

回答

1

你接近 - 使用:

SELECT d.EmpName, COUNT(*) as Total 
    FROM Emp_Departments d 
    WHERE d.DepartmentName IN ('Dept1', 'Dept2', 'Dept3') 
GROUP BY d.EmpName 
    HAVING COUNT(DISTINCT d.DepartmentName) = 3 
+0

這是行不通的,因爲OP提到'EmpName'不是唯一的 –

+0

@ zi42:不相關 - 這是被分組的列。 –

+0

好的。我以爲他試圖以同樣的名義區分許多員工,這兩種做法都沒有任何意義。 –