У меня есть две таблицы, которые я пытаюсь объединить несколько раз. Родительская таблица называется Jobs, а дочерняя таблица называется Routings. Работа может иметь 1 или более маршрутов. Мне нужно, чтобы мой вывод содержал одну запись для каждого задания, объединенную с тремя отдельными соединениями в таблицу маршрутизации. Одно соединение предназначено для текущих данных (первое нулевое значение даты в последовательности), одно для следующего (последовательность идет сразу после текущего) и финальное для последнего (определяется как наивысший порядковый номер для задания).
Ниже приведен небольшой пример, который я собрал для предоставления данных выборки и желаемого результата. Это переводит проблему в более простую форму, показывая на самом деле только Routings, а не таблицу Job. Если мне удастся найти способ более легкого извлечения текущих, следующих и последних значений, я могу взять его оттуда.
Я пытался выполнить этот запрос через множество объединений, но, похоже, результаты пропускаются, когда следующей маршрутизации не существует (мне нужны нулевые значения). Выполнение левого внешнего соединения не исправило это. Я не уверен, если это потому, что это SQL Server 2000 или что.
drop table #routing
create table #routing
(
routingId int not null primary key,
jobid int not null,
sequence int not null,
sentdate datetime
)
insert into #routing
select
1, 1, 1, '1/1/2009'
union
select
2, 1, 2, '1/2/2009'
union
select
3, 1, 3, '1/3/2009'
union
select
4, 1, 4, null
union
select
5, 1, 5, null
union
select
6, 2, 1, '1/1/2009'
union
select
7, 2, 2, '1/2/2009'
union
select
8, 2, 3, '1/3/2009'
select * from #routing
/*
Expected Result:
Two Records, one for each job
JobId, CurrentRoutingId, NextRoutingId, LastRoutingId
1 4 5 5
2 null null 8
*/