我的表格如下:
ID | ChildsID | Name ----------------------- 1 NULL Name1 2 1 Name2 3 2 Name3 4 3 Name4 5 4 Name5 6 5 Name6 7 6 Name7 8 7 Name8 9 8 Name9 10 9 Name10 11 3 Name11
现在,我需要一个查询,该查询可以为每个至少有一个子记录的记录获取所有可能的子记录,并返回如下数据集:
ID | ParentID | Name | ParentIDs ----------------------------------------- 1 NULL Name1 11,10,9,8,7,6,5,4,3,2 2 1 Name2 11,10,9,8,7,6,5,4,3 3 2 Name3 11,10,9,8,7,6,5,4 4 3 Name4 10,9,8,7,6,5 5 4 Name5 10,9,8,7,6 6 5 Name6 10,9,8,7 7 6 Name7 10,9,8 8 7 Name8 10,9 9 8 Name9 10
您可以尝试使用此选项:
SELECT a.*,x.ParentIDs
FROM YourTable a
CROSS APPLY (SELECT STUFF(CAST((SELECT ',' + CONVERT(VARCHAR,b.ID)
FROM YourTable b WHERE b.ID > a.ID AND ISNULL(b.ParentID,0) > ISNULL(a.ParentID,0) ORDER BY ID DESC
FOR XML PATH(''), TYPE) AS VARCHAR(MAX)),1,1,'') AS ParentIDs ) x
WHERE x.ParentIDs IS NOT NULL
使用此查询。
更新结果:Fiddler演示
CREATE TABLE TABLE1 (ID INT, ParentID INT, NAME VARCHAR(10));
INSERT INTO TABLE1 VALUES(1, NULL, 'Name1');
INSERT INTO TABLE1 VALUES(2, 1, 'Name2');
INSERT INTO TABLE1 VALUES(3, 2, 'Name3');
INSERT INTO TABLE1 VALUES(4, 3, 'Name4');
INSERT INTO TABLE1 VALUES(5, 4, 'Name5');
INSERT INTO TABLE1 VALUES(6, 5, 'Name6');
INSERT INTO TABLE1 VALUES(7, 6, 'Name7');
INSERT INTO TABLE1 VALUES(8, 7, 'Name8');
INSERT INTO TABLE1 VALUES(9, 8, 'Name9');
INSERT INTO TABLE1 VALUES(10, 9, 'Name10');
INSERT INTO TABLE1 VALUES(11, 3, 'Name11');
SELECT ID, ParentID , Name, Child = STUFF((
SELECT ',' + CAST(B.ID AS VARCHAR(100)) FROm TABLE1 AS B
WHERE ISNULL(A.ID, 0) < B.ID AND B.ID NOT IN(
ISNULL((SELECT TOP 1 C.ID FROm TABLE1 AS C
WHERE C.ParentID IN (
SELECT ParentID FROM TABLE1 WHERE ID <= A.ID)
ORDER BY C.ID DESC), 0))
ORDER BY B.ID DESC
FOR XML PATH (''), type).value('.', 'varchar(max)'), 1,1,'')
FROm TABLE1 AS A
旧结果:
SELECT ID, ParentID , Name, ParentIDs = STUFF((
SELECT ',' + CAST(B.ID AS VARCHAR(100)) FROm MyTable AS B
WHERE ISNULL(A.ID, 0) < B.ID ORDER BY B.ID DESC FOR XML PATH (''), type).value('.',
'varchar(max)'), 1,1,'')
FROm MyTable AS A
问题内容: 嗨,我有一个引用自己的表,我需要能够从给定的父ID中选择父及其所有子记录。 我的表如下: 因此,对于上面的示例,我希望能够传递值1并获取上面的所有记录。 到目前为止,我已经提出了以下递归表值函数,但是它的行为不符合预期(仅返回第一条记录)。 问题答案: 你可以试试这个
问题内容: 我有一个包含以下各列的模型: 我有索引和。 现在,我想获取由排序的每个对象的第一个日志。 一种方法是对每个用户名运行以下查询: 但这显然会查询数据库很多次(等于用户名的数量)。有什么方法可以只执行一个数据库查询吗? 问题答案: 另一种情况: 返回每个“第一”条目 的整行。 这种Ruby语法应该可以工作:
问题内容: 在多表查询中,每条记录只能获得一行? 我有这三个表: 苹果 疲劳风险管理系统 FARM_APPLES 使用此表,我需要以下结果: 非常感谢您的任何帮助,在此先感谢您。 编辑 感谢OMG Ponies和Bill,我将尽力尝试您的两种解决方案,这是最后一件事,它有可能获得以下结果: 问题答案: Firebird 2.0支持CASE表达式,因此您可以使用:
我正在寻找一种方法,以获得所有的DNS记录的网址<有没有一种方法可以在没有任何库的情况下使用C#实现这一点?
本文向大家介绍MySQL获取所有分类的前N条记录,包括了MySQL获取所有分类的前N条记录的使用技巧和注意事项,需要的朋友参考一下 比如有文章表 Article(Id,Category,InsertDate),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用 @N 就是你要取多少条 下面是我用到了一个产品分类表中,superId是大分类,prcid是产品分类。能
问题内容: 如标题所示,我想选择以分组的每组行的第一行和最后一行。 我在此表中包含以下数据: 我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。 结果表应如下所示: 我使用和和进行了查询。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。 问题答案: