代码之家  ›  专栏  ›  技术社区  ›  disasterkid

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

  •  1
  • disasterkid  · 技术社区  · 7 年前

    此表描述了员工投入时间的百分比。

    • 日期
    • 受雇者
    • 承诺 :例如,20%表示员工计划将每天20%的时间用于工作

    这个表基本上是一个日历,一年中的每一天都有一行。

    • 日历_日期
    • :一个二进制列,指示该日期是否为工作日(例如,如果该天是周末或假日,则值为0,否则为1)

    员工承诺

    但我想要的是,每天都有员工没有投入到任何工作中去。E、 g.如果员工 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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Linoff    7 年前

    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;