Sql 获取每个员工缺勤记录的值
我有两张桌子: 表1-员工承诺 此表描述了员工投入时间的百分比 栏目:Sql 获取每个员工缺勤记录的值,sql,postgresql,Sql,Postgresql,我有两张桌子: 表1-员工承诺 此表描述了员工投入时间的百分比 栏目: 日期:他们投入时间的日期 员工:员工用户名 承诺:例如,20%表示员工计划将每天20%的时间用于工作 表2-日历 这个表基本上是一个日历,一年中的每一天都有一行 栏目: 日历日期 包括:一个二进制列,指示该日期是否为工作日(例如,如果该日期为周末或假日,则该值为0,否则为1) EmployeeCommitment表格不包含员工没有承诺的天数,这是非常合理的,因为只有当有人承诺工作时,才会出现新的一行,而不是相反的一行
- 日期:他们投入时间的日期李>
- 员工:员工用户名
- 承诺:例如,20%表示员工计划将每天20%的时间用于工作
- 日历日期
- 包括:一个二进制列,指示该日期是否为工作日(例如,如果该日期为周末或假日,则该值为0,否则为1)
john.smith
本周只承诺了3天(mon
,tue
,wed
),他应该为thu
和fri
(假设这是一个没有假期的正常周)额外获得两行,其中包含他的姓名和0%的承诺,这周总共有5行
我试着这样把两张桌子连接起来
SELECT * FROM Calendar c LEFT JOIN EmployeeCommitment e ON c.Calendar_Date=EmployeeCommitment.Date
但是此联接为右侧的表提供了
null
列,无法知道它们属于哪个员工。您需要使用交叉联接生成所有行,然后输入所需信息。例如,使用左联接
:
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;