我有一个带有两个表 worktodo 和 workdone 的 MS SqlServer 2008 数据库:
CREATE TABLE worktodo
(
workorder VARCHAR(32),
worker VARCHAR(64),
duedate DATETIME,
PRIMARY KEY workorder
);
CREATE TABLE workdone
(
workorder VARCHAR(32),
donedate DATETIME
);
我正在寻找一个查询,该查询将为每个工作人员返回工作任务的总数和迟到的工作任务的总数,其中迟到定义为 donedate > duedate 或 duedate > NOW 并且没有 workdone 记录。
在代码中做起来很简单,但我需要一个可以由一个相当简单的报告工具运行的查询。
有任何想法吗?
编辑:添加示例数据:
worktodo:
workorder worker duedate
10001 JOE 2012-01-01
10002 JOE 2012-01-02
10003 FRED 2012-01-03
10004 BILL 2013-12-31
workdone:
worker donedate
10001 2011-01-01
10002 2011-12-30
10002 2012-01-04
Desired:
worker num_total_workorders num_late_workorders
BILL 1 0
FRED 1 1
JOE 2 1
Bill 有一个 worktodo,它没有子 workdone。但是因为到期日在未来,所以他有一个工单,没有迟到的工单。
Fred 有一个 worktodo,它没有子 workdone。但是因为到期日是过去的,所以他有一份工单和一份迟到的工单。
乔有两个工作要做。工单 10001 的截止日期为 2012 年 1 月 1 日,但直到 2012 年 1 月 31 日才完成,所以为时已晚。工单 10002 的截止日期为 2012 年 1 月 2 日,但它最早的工作是在 2011 年 12 月 30 日之前完成的,所以还不算晚。10002 的另一个 workdone 的 donedate 晚于到期日没有相关性。这导致乔有两个工单和一个迟到的工单。
(另外 - 假设 workorder 是 worktodo 上的主键)。