我表格中的原始数据包含一个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.对于熟悉使用游标的人(我不是这样),我觉得这是一个简单的答案。我想不出有任何其他方式去做,但也许别人可以。无论如何,提前感谢任何答案,对不起,如果我做错了,这是我的第一篇文章。
答案 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?如果将父子关系提取到两个不同的表,则可能有所帮助。