不同记录的计数 - SQL

zod*_*zod 6 sql db2

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  
Run Code Online (Sandbox Code Playgroud)

我试图根据项目ID列出仅在多个项目上工作的员工.我试过了distinct和GROUP BY.但我无法准确地理解它.

从上表我期待这样的结果

 empid   projectId  
    100     500         
    100     501          
    100     502 
Run Code Online (Sandbox Code Playgroud)

Raj*_*ore 6

试试这个(修改后的代码)

SELECT DISTINCT EmpId, ProjectId
FROM TableX
WHERE EmpId IN 
(
    SELECT EmpId
    FROM TableX
    GROUP BY EmpId
    HAVING COUNT (DISTINCT ProjectId) > 1
)
Run Code Online (Sandbox Code Playgroud)

这应该给你

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

3 row(s)
Run Code Online (Sandbox Code Playgroud)

在评论中编辑为OP附加问题添加的内容

给你一个计算项IDIds的计数意味着GROUP BY将处于一个EmpId级别而不需要子查询

SELECT EmpId, Count (Distinct ProjectId) Projects
FROM TableX
GROUP BY EmpId
Run Code Online (Sandbox Code Playgroud)

要获得具有多个项目的所有员工的项目计数,请执行以下操作

SELECT EmpId, Count (Distinct ProjectId) Projects
FROM TableX
GROUP BY EmpId
Having Count (Distinct ProjectId) > 1
Run Code Online (Sandbox Code Playgroud)