我想知道是否有人可以帮助我?
我目前正在从数据库中的统计数据中编写绩效管理报告
我正在计算每个员工每月完成的工作数量,但是,几个月工作人员不会完成任何工作,因此该月没有任何条目。
目前我写道:
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以上的数据工作正常,但是一名工作人员已经添加了一份工作,比如4月那么我希望其他员工显示0,直到他们添加数据等
任何帮助将不胜感激
答案 0 :(得分:0)
当我读到你的问题时,我想到了这一点:
答案 1 :(得分:0)
如果我假设您想要的所有员工都在表tb_staff_targets
中,那么您想要将联接的顺序从left join
切换为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
的员工列表。