Это что-то вроде LAG () или LEAD () в SQL Server 2000 - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу получить значение следующей строки в текущей строке.Точно так же, как 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 Ответ

0 голосов
/ 14 февраля 2019

Вы можете попробовать выполнить следующие действия, используя подзапрос.

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
...