我有一个表EmpJob
列出了员工,完成工作和完成工作的次数(列:EmpID,JobID,总计)。我有另一个列出所有作业的查找表Jobs
(列:JobID,JobDesc)。员工可能无法完成所有工作。我的要求是向所有员工显示所有工作,其中包括未完成工作的计数为零。
我对此毫无头绪。我尝试在IF EXISTS
条款中使用NOT EXISTS
条款或WHERE
,但这并没有给我正确的结果。
这是一个例子:
Jobs
表:
JobID | JobDesc
---------------
1 | Job1
2 | Job2
3 | Job3
EmpJob
表:
EmpID | JobID | Total
Emp1 | 1 | 3
Emp1 | 3 | 5
Emp2 | 2 | 6
结果应为3 Jobs x 2 Employees = 6 records
Emp1 | Job1 | 3
Emp1 | Job2 | 0
Emp1 | Job3 | 5
Emp2 | Job1 | 0
Emp2 | Job2 | 6
Emp2 | Job3 | 0
有人可以提出查询吗?提前谢谢。
答案 0 :(得分:0)
要遵循的策略草图:
获得一组员工:
select distinct EmpID from EmpJob // query1(如果您没有其他员工来源)
获得工作和员工的交叉产品:
select EmpID,JobID,0 as Total from <query1> outer join Jobs // query2
进行已知计数和0计数的联合:
select EmpID,JobID,Total from EmpJob union <query2> // query3
总结每个(员工,工作)小组的总数
select EmpID,JobID,sum(Total) from <query3> group by EmpID,JobID
将各个部分放在一起会得到结果:
select EmpID, JobID, sum(Total) as Total from ( (select EmpID, JobID, 0 as Total from Jobs outer join (select distinct EmpID from EmpJob)) union (select EmpID, JobID, Total from EmpJob) ) group by EmpID, JobID order by EmpID, JobID