TSQL - 检索父ID

时间:2013-09-09 22:03:21

标签: sql tsql sql-server-2005

我表格中的原始数据包含一个ID列和一个'IsFolder'列,可以是1或0,如下所示:

ID    IsFolder
1     1
2     0
3     0
4     1
5     0
6     0
7     0
8     0
9     0
10    0
11    1
12    0
13    0
14    0
15    1
16    0
17    0

代码解释这一点的方式是,如果一行代表'IsFolder',那么它就是一个文件夹,它下面的所有任务(直到你点击下一个文件夹)都是该文件夹的子代。

我想要的是一个Select语句,它只返回所有非文件夹任务的父文件夹的ID。如下所示:

ID    ParentFolder
2     1
3     1
5     4
6     4
7     4
8     4
9     4
10    4
12    11
13    11
14    11
16    15
17    15

我正在使用MS SQL Server Management Studio 2005.对于熟悉使用游标的人(我不是这样),我觉得这是一个简单的答案。我想不出有任何其他方式去做,但也许别人可以。无论如何,提前感谢任何答案,对不起,如果我做错了,这是我的第一篇文章。

2 个答案:

答案 0 :(得分:3)

你不需要光标 - 只需一个子查询:

SELECT ID, 
       (SELECT MAX(ID) 
        FROM Folders 
        WHERE ID < f.ID
           AND IsFolder = 1) AS Parent
FROM Folders f
WHERE IsFolder = 0

答案 1 :(得分:1)

我只想指出,如果数据结构稍有改变,这项任务会更容易,整体设计更具可扩展性。例如,如何将任务添加到文件夹4?如果将父子关系提取到两个不同的表,则可能有所帮助。

相关问题