2010-05-31 3 views
3

J'ai une table avec un JobID (PK), EmployeeID (FK), StartDate, EndDate contenant des données telles que:SQL Server combinant 2 lignes dans 1 de la même table

1, 10, '01-Jan-2010 08:00:00', '01-Jan-2010 08:30:00' 
2, 10, '01-Jan-2010 08:50:00', '01-Jan-2010 09:05:00' 
3, 10, '02-Feb-2010 10:00:00', '02-Feb-2010 10:30:00' 

Je veux retourner un enregistrer pour chaque EndDate pour un Job, puis les mêmes employés StartDate pour son prochain travail immédiat (par date et heure). Donc, à partir des données ci-dessus le résultat serait

Result 1: 10, 01-Jan-2010 08:30:00, 01-Jan-2010 08:50:00 
Result 2: 10, 01-Jan-2010 09:05:00, 02-Feb-2010 10:00:00 

Apprécions grandement toute aide!

+1

S'il vous plaît poster le code que vous avez écrit jusqu'à présent. Les gens n'aiment généralement pas écrire votre code pour vous. –

+0

Est-ce que EndDate dans une rangée peut être après le StartDate dans une rangée suivante? – gbn

Répondre

2

Le code de Lance a un problème. Voici la requête corrigée qui va fonctionner:

select j1.JobID, j1.EmployeeID, j1.EndDate, 
(
    select top 1 j2.StartDate 
     from Job j2 
    where j2.EmployeeID = j1.EmployeeID 
     and j2.StartDate > j1.EndDate 
    order by j2.StartDate 
) as NextStartDate 
from Job j1 
0

Quelque chose comme ce serait une façon:

select j1.JobID, j1.EmployeeID, j1.EndDate, 
(
    select top 1 j2.StartDate from Job j2 
    where j2.EmployeeID = j1.EmployeeID 
    order by j2.StartDate 
    where j2.StartDate > j1.EndDate 
) as NextStartDate 
from Job j1 

Bonne chance!

Questions connexes