khe*_*eya 1 sql sql-server-2005
我在sql server 2005中有这个表:
id student active
1 Bob 1
3 Rob 0
5 Steve 1
7 John 1
8 Mark 0
10 Dave 0
16 Nick 1
Run Code Online (Sandbox Code Playgroud)
我的选择查询按给定的ID返回活动学生.但我也希望返回上一个和下一个活跃的学生的ID.如果没有prev,则为0或null.下一个相同.
示例:对于id = 5,我的选择将返回
id student prev_id next_id
5 steve 1 7
Run Code Online (Sandbox Code Playgroud)
示例:对于id = 7,我的选择将返回
id student prev_id next_id
7 John 5 16
Run Code Online (Sandbox Code Playgroud)
示例:对于id = 16,我的选择将返回
id student prev_id next_id
16 Nick 7 0
Run Code Online (Sandbox Code Playgroud)
如何编写此选择查询?
我有查询,但我无法正确获得prev id.它始终返回第一个活动ID.
谢谢
编辑:这是我现在的查询.
select id, student,
(select top 1 id from test where id<7 and active=1) as prev,
(select top 1 id from test where id>7 and active=1) as next
from test where id=7--I used 7 just as an example. it will be a parameter
Run Code Online (Sandbox Code Playgroud)
小智 5
尝试这样的事情
SELECT ID,
Student,
( SELECT TOP 1
ID
FROM dbo.table AS pT
WHERE pT.ID < T.ID And Active = 1
ORDER BY ID DESC
) AS PrevID,
( SELECT TOP 1
ID
FROM dbo.table AS pT
WHERE pT.ID > T.ID And Active = 1
ORDER BY ID
) AS NextID
FROM dbo.table AS T
Run Code Online (Sandbox Code Playgroud)