我有两张桌子:
表1 - 员工承诺 此表描述了员工的时间承诺百分比。
列:
表2 - 日历 该表基本上是一年中每天都有一行的日历。
列:
EmployeeCommitment 表不包含员工没有承诺的日子,因为只有当某人承诺工作而不是相反时才会获得新的行。
但我想拥有的是每天都要争取员工没有承诺任何工作。例如。如果员工john.smith
本周仅承诺3天(mon
,tue
,wed
),则应为thu
和{{增加两行1}}(假设这是一个没有假期的正常周),包含他的名字和0%的承诺,本周共有5行。
我试图像这样加入两个表
fri
但是这个JOIN为右边的表格提供了SELECT * FROM Calendar c LEFT JOIN EmployeeCommitment e ON c.Calendar_Date=EmployeeCommitment.Date
列,并且无法知道他们属于哪个员工。
答案 0 :(得分:2)
您需要使用cross join
生成所有行,然后引入所需的信息。 。 。例如,使用left join
:
SELECT c.*, e.employee, COALESCE(ec.commitment, 0) as commitment
FROM Calendar c CROSS JOIN
(SELECT DISTINCT Employee FROM Employees e) e LEFT JOIN
EmployeeCommitment ec
ON c.Calendar_Date = ec.Date AND
e.Employee = ec.Employee;