我有一个具有父/子关系的表:
Table A Column Id int Column Parent_Id int Column Description text
一组示例数据为:
999, NULL, 'Corp.' 998, 999, 'Div1', 997, 999, 'Div2', 510, 998, 'Child Div1A', 110, 997, 'Child Div2A', 120, 997, 'Child Div2B',
我的查询需要返回给定父级的最小子级集。因此,例如,如果给定999,我将返回510、110、120。但是给定997,我将仅返回110和120。如果给定110,则什么也不会返回。我无法弄清楚如何正确格式化查询。我首先对表进行JOIN- ing操作,但是当我实际上需要将N级降低时,这似乎只会使我降低1级。
Declare @t Table(ID int,Parent_ID int,Description varchar(20)) insert into @t values(999, NULL, 'Corp.') insert into @t values(998, 999, 'Div1') insert into @t values(997, 999, 'Div2') insert into @t values(510, 998, 'Child Div1A') insert into @t values(110, 997, 'Child Div2A') insert into @t values(120, 997, 'Child Div2B') ;WITH Rollups AS ( SELECT Id, Parent_Id, Description FROM @t WHERE ID = 999 UNION ALL SELECT parent.Id, parent.Parent_Id, child.Description FROM @t parent INNER JOIN Rollups child ON child.Id = parent.Parent_Id ) SELECT * FROM Rollups Where not Exists(Select * from @t where Parent_Id=Rollups.ID)