如何在sql查询中查找记录的第n个子项
我有一个存储类别和子类别的表(自联接)如何在sql查询中查找记录的第n个子项,sql,sql-server,Sql,Sql Server,我有一个存储类别和子类别的表(自联接) 如何在sql查询中查找类别的第N个子项查找类别M的第N个子项(按类别ID排序): SELECT ParentCategoryId, , CategoryId AS [n-th child] FROM ( SELECT CategoryId , ParentCategoryId , ROW_NUMBER() OVER (PARTITION BY ParentCategoryId ORDER BY CategoryId) as Chil
如何在sql查询中查找类别的第N个子项查找类别
M
的第N个子项(按类别ID排序):
SELECT ParentCategoryId,
, CategoryId AS [n-th child]
FROM (
SELECT CategoryId
, ParentCategoryId
, ROW_NUMBER() OVER (PARTITION BY ParentCategoryId ORDER BY CategoryId) as ChildNumber
FROM Categories
) p
WHERE ChildNumber = %N
select *
from (
select row_number() over (order by c.CategoryId) as rn
, c.*
from Categories p
join Categories c
on p.CategoryId = c.ParentCategoryId
where p.CategoryId = M
)
where rn = N
要查找类别
M
的N
th子项(按类别ID排序),请执行以下操作:
select *
from (
select row_number() over (order by c.CategoryId) as rn
, c.*
from Categories p
join Categories c
on p.CategoryId = c.ParentCategoryId
where p.CategoryId = M
)
where rn = N
像这样的怎么样
DECLARE @Categories TABLE(
CategoryId INT,
CategoryName VARCHAR(20),
ParentCategoryId INT
)
INSERT INTO @Categories SELECT 1, '1',NULL
INSERT INTO @Categories SELECT 2, '2',NULL
INSERT INTO @Categories SELECT 3, '1.3',1
INSERT INTO @Categories SELECT 4, '1.4',1
INSERT INTO @Categories SELECT 5, '1.3.5',3
INSERT INTO @Categories SELECT 6, '1.3.6',3
INSERT INTO @Categories SELECT 7, '1.3.6.7',6
INSERT INTO @Categories SELECT 8, '1.4.8',4
DECLARE @CatID INT,
@NthLevel INT
SELECT @CatID = 1,
@NthLevel = 2
;WITH Vals AS (
SELECT *,
1 AS CatLevel
FROM @Categories c
WHERE CategoryId IS NULL
UNION ALL
SELECT c.*,
CatLevel + 1 AS CatLevel
FROM Vals v INNER JOIN
@Categories c ON c.ParentCategoryId = v.CategoryID
)
SELECT *
FROM Vals
WHERE CatLevel = @NthLevel
这将递归地构建树结构,并将其限制在您要查找的树级别。类似的内容如何
DECLARE @Categories TABLE(
CategoryId INT,
CategoryName VARCHAR(20),
ParentCategoryId INT
)
INSERT INTO @Categories SELECT 1, '1',NULL
INSERT INTO @Categories SELECT 2, '2',NULL
INSERT INTO @Categories SELECT 3, '1.3',1
INSERT INTO @Categories SELECT 4, '1.4',1
INSERT INTO @Categories SELECT 5, '1.3.5',3
INSERT INTO @Categories SELECT 6, '1.3.6',3
INSERT INTO @Categories SELECT 7, '1.3.6.7',6
INSERT INTO @Categories SELECT 8, '1.4.8',4
DECLARE @CatID INT,
@NthLevel INT
SELECT @CatID = 1,
@NthLevel = 2
;WITH Vals AS (
SELECT *,
1 AS CatLevel
FROM @Categories c
WHERE CategoryId IS NULL
UNION ALL
SELECT c.*,
CatLevel + 1 AS CatLevel
FROM Vals v INNER JOIN
@Categories c ON c.ParentCategoryId = v.CategoryID
)
SELECT *
FROM Vals
WHERE CatLevel = @NthLevel
这将递归地构建树结构,并将其限制在您要查找的树级别。+1现在问题被编辑为“第n个孩子/孩子”,这个答案更有意义:)+1现在问题被编辑为“第n个孩子/孩子”,这个答案更有意义:)抱歉,这不起作用。我不是在寻找表中的第n个记录,我需要的是一个类别的第n个孩子,我相信它正是这样做的。它为表中的每个ParentCategoryId返回第n个子项。我再次尝试了此操作,但没有成功。它只是ParentId上的分区。无论如何,非常感谢你的帮助。对不起,这没用。我不是在寻找表中的第n个记录,我需要的是一个类别的第n个孩子,我相信它正是这样做的。它为表中的每个ParentCategoryId返回第n个子项。我再次尝试了此操作,但没有成功。它只是ParentId上的分区。无论如何,非常感谢你的帮助