0

我表中的原始数据由一个 ID 列和一个可以为 1 或 0 的列“IsFolder”组成,如下所示:

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”为 1,那么它就是一个文件夹,并且它下面的所有任务(直到您点击下一个文件夹)都是该文件夹的子级。

我想要的是一个 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。我觉得这对于那些熟悉使用游标(我不是)的人来说是一个简单的答案。我想不出任何其他方法来做到这一点,但也许其他人可以。无论如何,提前感谢任何答案,如果我做错了什么,我很抱歉,这是我的第一篇文章。

4

2 回答 2

3

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

SELECT ID, 
       (SELECT MAX(ID) 
        FROM Folders 
        WHERE ID < f.ID
           AND IsFolder = 1) AS Parent
FROM Folders f
WHERE IsFolder = 0
于 2013-09-09T22:11:25.553 回答
1

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

于 2013-09-09T22:15:45.027 回答