【发布时间】:2023-03-31 20:12:01
【问题描述】:
我的表中有以下数据
ID NAME PARENTID STATUS
----------- ------------------------------ ----------- ------
1 Folder A 0 0
2 Folder B 1 0
3 Folder C 2 1
4 Folder D 1 0
5 Folder E 4 0
6 Folder G 5 0
7 Folder H 6 1
以上记录来自表 [@Temp]。
[Name] - Folder Name
[ID] - Unique ID of folder in database (identity)
[ParentID] - Represents the parent of current folder.
查询以填充表格中的上述数据:
DECLARE @Temp TABLE
(
[ID] INT IDENTITY(1, 1) ,
[NAME] VARCHAR(30) ,
[PARENTID] INT,
[STATUS] BIT
)
INSERT INTO @Temp
SELECT 'Folder A' ,
0, 0
UNION
SELECT 'Folder B' ,
1, 0
UNION
SELECT 'Folder C' ,
2, 1
UNION
SELECT 'Folder D' ,
1, 0
UNION
SELECT 'Folder E' ,
4, 0
UNION
SELECT 'Folder G' ,
5, 0
UNION
SELECT 'Folder H' ,
6, 1
我有以下查询来获取 status=1 的记录
SELECT *
FROM @Temp WHERE [STATUS]=1
给出以下输出
ID NAME PARENTID STATUS
----------- ------------------------------ ----------- ------
3 Folder C 2 1
7 Folder H 6 1
我的目标也是获取那些记录,这些记录也是上述查询附带的记录的父母(直到 parentid=0)。即我想获得包含文件夹 C 和文件夹 H 的父级的输出:
ID NAME PARENTID STATUS
----------- ------------------------------ ----------- ------
1 Folder A 0 0
2 Folder B 1 0
3 Folder C 2 1
4 Folder D 1 0
5 Folder E 4 0
6 Folder G 5 0
7 Folder H 6 1
【问题讨论】:
-
你能举一个预期结果与源数据不同的例子吗?
标签: sql sql-server sql-server-2008 common-table-expression