2011-10-03 67 views
6
empid projectId TaskID 
100  500   1 
100  501   1 
100  502   1 
101  500   2 
101  500   5 
101  500   1 
102  400   1 
103  300   2 
104  300   2 
105  300   2 

我想根據項目ID列出只適用於多個項目的員工。 我嘗試不同和GROUP BY。但我無法完全確定。不同記錄的計數 - SQL

從上表很期待這樣的

empid projectId 
    100  500   
    100  501   
    100  502 

回答

6

結果試試這個(修改後的代碼)

SELECT DISTINCT EmpId, ProjectId 
FROM TableX 
WHERE EmpId IN 
(
    SELECT EmpId 
    FROM TableX 
    GROUP BY EmpId 
    HAVING COUNT (DISTINCT ProjectId) > 1 
) 

這應該給你

EmpId  ProjectId 
----------- ----------- 
100   500 
100   501 
100   502 

3 row(s) 

編輯內容添加了f在評論或OP的另一個問題

計數給你distint ProjectIds將意味着GROUP BY將在EmpId水平,無需使用子查詢

SELECT EmpId, Count (Distinct ProjectId) Projects 
FROM TableX 
GROUP BY EmpId 

要獲得的項目數量爲所有多個項目的員工,請執行下列操作

SELECT EmpId, Count (Distinct ProjectId) Projects 
FROM TableX 
GROUP BY EmpId 
Having Count (Distinct ProjectId) > 1 
+0

感謝。這項工作 – zod

+0

如何顯示該數也作爲第三列? – zod

+0

你想要一個任務的COUNT嗎? –

0
SELECT y.empid, y.projectId 
    FROM (SELECT empid 
       FROM YourTable 
       GROUP BY empid 
       HAVING COUNT(*) > 1) t 
     INNER JOIN YourTable y 
      ON t.empid = y.empid 
    ORDER BY y.empid, y.projectId 
+2

你真的不需要加入這種情況。 –

+1

@MariusSolbakkenMellum你能向我們展示如何在沒有JOIN的情況下做到這一點嗎? –

+0

對不起,這裏的觸發很少。有一點誤解,並混淆另一個未解決的問題.. –

1

你也可以使用一個窗COUNT()

WITH counted AS (
    SELECT 
    empid, 
    projectId, 
    COUNT(DISTINCT projectId) OVER (PARTITION BY empid) AS ProjectCount 
    FROM atable 
) 
SELECT DISTINCT 
    empid, 
    projectId 
FROM counted 
WHERE ProjectCount > 1 

參考文獻: