4

カテゴリの階層を作成するこのクエリがあります。それはうまくいきます。今、深さに基づいて表示順序を制御しようとしています。たとえば、「猫」というカテゴリがあります。「Sub Cat 1」と「Sub Cat 2」という 2 つのサブカテゴリがあります。サブカテゴリを表示順序と深さで並べ替えることはできますか? したがって、順序は、表示順序に基づいて、「Sub Cat 2」、「Sub Cat 1」の順になります。Depth と Display Order の位置に基づいて、カテゴリの順序を制御できるようにしたいと考えています。

これが私のクエリです:

DECLARE @CategoryID INT; 
DECLARE @ExcludeInactive BIT; 

SET @CategoryID = 2; 
SET @ExcludeInactive = 0;

Declare @Categories Table
(
    ID INT,
    Name VARCHAR(500),
    ParentID INT,
    Depth INT, 
    Active BIT,
    DisplayOrder INT
);

INSERT INTO @Categories
SELECT 2, 'Main', 0, 0, 1, 0
UNION ALL
SELECT 6, 'Cat', 2, 0, 1, 0
UNION ALL
SELECT 13, 'Sub Cat 1', 6, 1, 1, 2
UNION ALL
SELECT 14, 'Sub Cat 2', 6, 1, 1,    1
UNION ALL
SELECT 5, 'Cat 2', 2,0, 1, 0
UNION ALL
SELECT 15, 'Sub Cat 1', 5, 1, 1, 2
UNION ALL
SELECT 16, 'Sub Cat 2', 5, 1, 1, 1;

WITH Tree (ID, Name, ParentID, Depth, Sort, Active, DisplayOrder) AS 
( 
    SELECT ID, Name, ParentID, 0 AS Depth, CONVERT(varchar(255), Name) AS Sort, Active,     DisplayOrder         
    FROM @Categories 
    WHERE ParentID = @CategoryID 
    UNION ALL 
    SELECT CT.ID, CT.Name, CT.ParentID, Parent.Depth + 1 AS Depth, 
    CONVERT(varchar(255), Parent.Sort + ' > ' + CT.Name) AS Sort, CT.Active, CT.DisplayOrder 
    FROM @Categories CT 
    INNER JOIN Tree as Parent ON Parent.ID = CT.ParentID WHERE (@ExcludeInactive = 0  OR (CT.Active = 1 ))   
) 


SELECT ID, Name, ParentID, Depth, Sort, Active, DisplayOrder FROM Tree ORDER BY SORT

現在の出力:

ID  Name       ParentID   Depth  Sort             Active    DisplayOrder
6   Cat        2          0      Cat                  1         2
13  Sub Cat 1  6          1      Cat > Sub Cat 1      1         2
14  Sub Cat 2  6          1      Cat > Sub Cat 2      1         1
5   Cat 2      2          0      Cat 2                1         1
15  Sub Cat 1  5          1      Cat 2 > Sub Cat 1    1         2
16  Sub Cat 2  5          1      Cat 2 > Sub Cat 2    1         1

望ましい出力:

ID  Name       ParentID   Depth  Sort             Active    DisplayOrder
5   Cat 2      2          0      Cat 2                1         1
16  Sub Cat 2  5          1      Cat 2 > Sub Cat 2    1         1
15  Sub Cat 1  5          1      Cat 2 > Sub Cat 1    1         2
6   Cat        2          0      Cat                  1         2
14  Sub Cat 2  6          1      Cat > Sub Cat 2      1         1
13  Sub Cat 1  6          1      Cat > Sub Cat 1      1         2
4

1 に答える 1