获取每位员工缺席记录的值

时间:2017-10-04 20:43:58

标签: sql postgresql

我有两张桌子:

表1 - 员工承诺 此表描述了员工的时间承诺百分比。

列:

  • 日期:他们投入时间的日期。
  • 员工:员工用户名
  • 承诺:例如20%表示员工计划将20%的日常工作时间用于工作

表2 - 日历 该表基本上是一年中每天都有一行的日历。

列:

  • CALENDAR_DATE
  • 包含:二进制列,指示此日期是否为工作日(例如,如果该日期为周末或假日,则值为0,否则为1)

EmployeeCommitment 表不包含员工没有承诺的日子,因为只有当某人承诺工作而不是相反时才会获得新的行。

但我想拥有的是每天都要争取员工没有承诺任何工作。例如。如果员工john.smith本周仅承诺3天(montuewed),则应为thu和{{增加两行1}}(假设这是一个没有假期的正常周),包含他的名字和0%的承诺,本周共有5行。

我试图像这样加入两个表

fri

但是这个JOIN为右边的表格提供了SELECT * FROM Calendar c LEFT JOIN EmployeeCommitment e ON c.Calendar_Date=EmployeeCommitment.Date 列,并且无法知道他们属于哪个员工。

1 个答案:

答案 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;