我想编写一个sql查询来获取下一行的列为一行的列。测试示例如下: 表:
ID startno
1 1
2 5
3 9
我想获取sql查询以获得如下结果:
ID startno endno
1 1 5
2 5 9
3 9 null
答案 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)
中的示例结果
答案 1 :(得分:1)
SELECT id, StartNo,
(SELECT TOP(1) StartNo
FROM Table1 t2 WHERE t2.id > t1.id ORDER BY t2.id) EndNo
FROM Table1 t1