Deux tables temporaires sont créées puis chargées ... Voici le schéma.Script T-SQL - problèmes logiques avec chronologie
Create table #SH ([date] datetime,
sched_id int,
agent_id int)
Create table #SD (sched_id int,
start_minute int,
length int,
exception_code int)
(schéma et la conception est quelque chose que je ne peux pas changer, malheureusement, les deux tables temporaires sont chargés à partir des fichiers plats. Je peux présenter et charger de nouvelles tables temporaires si nécessaire). Un peu d'arrière-plan - La table d'en-tête #SH contient un calendrier de personnes comme «Start_minute» et va pour «schedule_length» en minutes. Par exemple, si la minute de début et la durée du programme étaient 480, 8 heures (8 heures = 480 minutes) et 16 heures (480 minutes plus tard, 4 heures = 960 minutes)
La table #SD contient des exceptions à la entête. Dans l'exemple ci-dessus, la personne aurait probablement une exception de déjeuner qui serait start_minute = 720 et une longueur de 30 (12:00 - 12:30).
Date et agent_id est la seule chose que je suis intéressé de #SH, les informations d'exception dans #sd est ce que je suis intéressé par
Cette requête fonctionne:.
Select [date],#sd.start_minute,#sd.length,#sd.start_minute + #sd.length as 'end_minute',agent_id
from #SH
inner join #SD on #SD.sched_id = #sh.sched_id
* end_minute est en fin de compte une valeur calculée de début + longueur = fin
Ce retourne quelque chose comme:
Date Start length end
1 2010-11-11 600 30 630
2 2010-11-11 630 40 670
3 2010-11-11 750 15 765
4 2010-11-11 800 40 840
Maintenant, je voudrais pouvoir dire que c'était fini et repartir ... mais des problèmes de saisie de données existent. Dans la ligne 1 et 2, l'heure de fin de la ligne 1 aligne avec l'heure de début de la ligne 2 et devraient être combinées pour que mes résultats ressemblent à ceci:
Date Start length end
1 2010-11-11 600 70 670
2 2010-11-11 750 15 765
3 2010-11-11 800 40 840
Toute idée est sur la façon de construire cette logique si je reçois les 3 lignes de retour au lieu de 4? Je travaille à rejoindre la table sur # sd1.start + # sd1.length = # sd2.start pour le moment. Et pour compliquer davantage ... l'exemple ci-dessus était de 2 lignes qui devaient être combinées. J'ai rencontré un enregistrement qui avait successivement 30 entrées de 1 minute que je devrais faire dans un seul enregistrement. Heureusement, ils ne peuvent pas se chevaucher (vous n'aurez pas 2 enregistrements occupant les mêmes minutes), mais je ne pense pas que la déclaration de jointure que je considère ci-dessus fonctionnera pour cela.
J'ai fait quelques modifications sur ma propre grammaire ... il y a quelques colonnes supplémentaires dans #SH, mais elles ne sont pas pertinentes. – Twelfth