0

我想知道是否有人可以帮助我?

我目前正在根据我们数据库中的统计数据编写绩效管理报告

我正在尝试计算每个员工每月完成的工作数量,但是,有些月份员工不会完成任何工作,因此该月将没有条目。

目前我写过:

SELECT
  CAST(MONTH(s.Date_Entered) AS VARCHAR(2)) + '-' + 
                               CAST(YEAR(s.Date_Entered) AS VARCHAR(4)) AS Month,
  s.staff,
  CASE 
    WHEN COUNT(*) > 0 THEN COUNT (*) 
    ELSE 0 
  END AS Jobs,
  ot.monthly_target AS Target
FROM tb_statistics AS s
LEFT JOIN tb_staff_targets as ot ON (s.staff = ot.staff)
GROUP BY s.staff, 
         CAST(MONTH(s.Date_Entered) AS VARCHAR(2)) + '-' 
                                      + CAST(YEAR(s.Date_Entered) AS VARCHAR(4)),
         ot.monthly_target

现在计数对于超过 0 的数据工作正常,但是其中一名员工添加了一份工作,比如说,四月,然后我希望其他员工显示 0,直到他们添加数据等

任何帮助,将不胜感激

4

2 回答 2

0

如果我假设您想要的所有员工都在 table 中tb_staff_targets,那么您想将加入的顺序从 aleft join切换到 a right join

SELECT CAST(MONTH(s.Date_Entered) AS VARCHAR(2)) + '-' + 
                               CAST(YEAR(s.Date_Entered) AS VARCHAR(4)) AS Month,
       s.staff,
       (CASE WHEN COUNT(*) > 0 THEN COUNT (*) 
             ELSE 0 
        END) AS Jobs,
      ot.monthly_target AS Target
FROM tb_statistics s RIGHT JOIN
     tb_staff_targets ot
     ON (s.staff = ot.staff)
GROUP BY s.staff, 
         CAST(MONTH(s.Date_Entered) AS VARCHAR(2)) + '-' 
                                      + CAST(YEAR(s.Date_Entered) AS VARCHAR(4)),
         ot.monthly_target

这会将所有内容连同他们的统计信息一起保存在人员表(所有人员)中。

如果员工不在此表中,那么您需要一些员工列表的来源,该列表的值将被赋予0

于 2013-05-01T13:26:48.860 回答
0

当我读到你的问题时,我想到了:

  • 获取按月和员工分组的已完成工作的总和
  • 获取完成工作的月份列表
  • 获取员工名单
  • 做一个完整的外部连接,将几个月与员工结合起来
  • 用计算出的已完成工作总和对组合进行左连接
  • 使用 coalesce 将 NULL 值替换为零
于 2013-05-01T13:06:22.657 回答