Это что-то вроде 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
Другие вопросы по тегам