Это что-то вроде LAG() или LEAD() в SQL Server 2000
Я хочу получить значение следующей строки в текущей строке. Как LEAD()
делает в последнем SQL Server. Но в настоящее время я использую SQL Server 2000. И у меня нет другого выбора.
Фактический сценарий:
TableRule:
# HeadNo | NextHeadNo | NoFrom
-----------+------------+------------
1 AA | AB | 1
2 AB | AC | 1
3 AC | AX | 1
4 AD | AE | 1 ****and so on
Я хочу обновить NextHeadNo
значение на основе следующего значения на HeadNo
,
Так согласно данным Row-3
должен получить обновление AX ➪ AD
,
У меня есть около 1000 записей для обновления за один раз.
Я надеюсь, что любой может помочь мне с этим.
1 ответ
Вы можете попробовать выполнить следующие действия, используя подзапрос.
SELECT *,
(SELECT TOP 1 headno
FROM @table T2
WHERE T2.headno > T1.headno
ORDER BY headno) NextHeadNo
FROM @table T1
ORDER BY headno
Чтобы обновить, вы можете попробовать как следующее.
UPDATE T1 SET NextHeadNo=
(SELECT TOP 1 headno
FROM @table T2
WHERE T2.headno > T1.headno
ORDER BY headno)
FROM @table T1
Редактировать:
но в последнем ряду получается NULL, поэтому я хочу дать ссылку на первый ряд. Как я могу это сделать?
Я предлагаю вам написать отдельное заявление об обновлении вместо того, чтобы писать CASE WHEN
как после.
update t
set t.NextHeadNo =
(
select top 1 HeadNo from @table order by HeadNo
)
from @table t
where t.NextHeadNo is null