1

カテゴリとサブカテゴリを格納するテーブルがあります (自己結合)

The table structure is like this:
-CategoryId
-CategoryName
-ParentCategoryId

SQLクエリでカテゴリのn番目の子/子を見つける方法

4

3 に答える 3

8

このようなものはどうですか

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

これにより、ツリー構造が再帰的に構築され、探しているツリー レベルに制限されます。

于 2012-08-02T06:36:25.980 に答える
1
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
于 2012-08-02T06:32:59.583 に答える
0

NCategory のth の子を、CategoryId で並べ替えて検索するには、次のようにしますM

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
于 2012-08-02T06:33:42.647 に答える