sql查询以获取下一行的列为行的列

时间:2015-07-02 08:42:12

标签: sql-server sql-server-2008

我想编写一个sql查询来获取下一行的列为一行的列。测试示例如下:     表:

ID   startno 
1       1             
2       5           
3       9           

我想获取sql查询以获得如下结果:

ID   startno  endno
1      1         5
2      5         9
3      9         null

2 个答案:

答案 0 :(得分:3)

你可以这样做:

WITH CTE AS
(SELECT *,ROW_NUMBER()OVER(ORDER BY ID) AS RN
FROM TableName)

SELECT T1.ID,T1.startno,T2.startno as endno
FROM CTE T1 LEFT JOIN
     CTE T2 ON T1.RN=(T2.RN-1)

您也可以使用ON T1.ID=(T2.ID-1)。但是,如果ID字段不是连续的或缺少任何ID字段,则Join会在我们检测到的情况下无法正常工作。这就是为什么我使用ROW_NUMBER来获得一系列连续数字来加入表格的原因。

结果:

ID  startno endno
1   1       5
2   5       9
3   9       (null)

SQL Fiddle

中的示例结果

答案 1 :(得分:1)

这是another way of doing

SELECT id, StartNo, 
        (SELECT TOP(1) StartNo 
         FROM Table1 t2 WHERE t2.id > t1.id ORDER BY t2.id) EndNo
FROM Table1 t1