类似于SQL Server 2000中的LAG()或LEAD()

问题描述 投票:1回答:1

我想获取当前行中的下一行值。就像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条记录要更新一次。

我希望有人能帮助我。

sql-server sql-server-2000 lag lead
1个回答
1
投票

您可以尝试使用子查询进行以下操作。

SELECT *, 
       (SELECT TOP 1 headno 
        FROM   @table T2 
        WHERE  T2.headno > T1.headno 
        ORDER  BY headno) NextHeadNo 
FROM   @table T1 
ORDER  BY headno 

Online Demo

要进行更新,您可以尝试以下操作。

UPDATE T1 SET NextHeadNo= 
       (SELECT TOP 1 headno 
        FROM   @table T2 
        WHERE  T2.headno > T1.headno 
        ORDER  BY headno)  
FROM   @table T1

编辑:

但在最后一行得到NULL,所以我想给第一行的引用。我怎样才能做到这一点?

我建议你写一个单独的更新声明,而不是像下面这样编写qazxsw poi。

CASE WHEN
© www.soinside.com 2019 - 2024. All rights reserved.