J'ai une base de données MS SqlServer 2008 avec deux tables, worktodo et workdone:se joindre à l'enfant plus tôt dossier
CREATE TABLE worktodo
(
workorder VARCHAR(32),
worker VARCHAR(64),
duedate DATETIME,
PRIMARY KEY workorder
);
CREATE TABLE workdone
(
workorder VARCHAR(32),
donedate DATETIME
);
Je suis à la recherche d'une requête qui renverra, pour chaque travailleur, le nombre total de worktodos, et le nombre total de worktodos en retard, où late est défini comme donedate> duedate, ou duedate> NOW et il n'y a pas d'enregistrement workdone.
Très facile à faire dans le code, mais j'ai besoin d'une requête qui peut être exécutée par un outil de reporting plutôt simple.
Des idées?
ÉDITÉ: données exemple Ajouté:
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 a un worktodo, qui n'a pas workdones enfant. Mais parce que le futur est dans le futur, il a donc un ordre de travail et aucun travail en retard.
Fred a un worktodo, qui n'a pas de workdones enfant. Mais parce que le duedat est dans le passé, il a donc un travail et un travail en retard.
Joe a deux worktodos. L'ordre de travail 10001 a été daté du 01-01-2012, mais il n'a pas été fait avant le 2012-01-31, alors il est tard. L'ordre de travail 10002 a été daté du 2012-01-02, mais le plus tôt le workdone a été fait avant, le 2011-12-30, il n'est donc pas trop tard. Qu'il y ait un autre workdone pour 10002 avec un donatate qui est postérieur au duedate n'a aucune pertinence. Ce qui résulte en Joe ayant deux ordres de travail, et un travail en retard.
(Supposons également que workorder est la clé primaire, sur worktodo).
Données d'échantillon disponibles et résultat souhaité? –
Est-ce que donedate est une colonne nullable dans workdone? – Tim