, :
DROP TABLE
GO
DROP TABLE
GO
DROP TABLE
GO
DROP TABLE
GO
CREATE TABLE
(
ID INT,
Name VARCHAR(20)
)
GO
INSERT INTO
GO
CREATE TABLE
(
ID INT,
saleidfk INT,
name VARCHAR(20)
)
GO
INSERT INTO
SELECT 1,1,'a'
UNION
SELECT 2,1,'b'
UNION
SELECT 3,1,'c'
UNION
SELECT 4,1,'d'
UNION
SELECT 5,1,'e'
UNION
SELECT 6,1,'f'
GO
CREATE TABLE
(
ProductID INT,
CategoryID INT
)
GO
INSERT INTO
SELECT 1,3
UNION
SELECT 2,3
UNION
SELECT 3,4
UNION
SELECT 4,5
UNION
SELECT 5,10
UNION
SELECT 6,10
GO
CREATE TABLE
(
ID INT,
ParentCategoryFK INT,
Name varchar(20)
)
GO
INSERT INTO
SELECT 1,NULL,'Men'
UNION
SELECT 2,1,'Shoes'
UNION
SELECT 3,2,'Sport'
UNION
SELECT 4,2,'Casual'
UNION
SELECT 5,1,'Watches'
UNION
SELECT 6,NULL,'Women'
UNION
SELECT 7,6,'Shoes'
UNION
SELECT 8,7,'Sport'
UNION
SELECT 9,7,'Casual'
UNION
SELECT 10,6,'Watches'
GO
WITH Categories (CategoryName,CategoryID, [Level], SortOrder) AS
(
SELECT Cat.Name,cat.id, 1 AS [Level], CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER (order by cat.Name) ) AS SortOrder
FROM
WHERE Cat.ParentCategoryFK IS NULL
UNION ALL
SELECT CAT.Name,cat.ID, [Level] + 1, c2.SortOrder + CONVERT(VARCHAR(MAX), ROW_NUMBER() OVER (order by cat.Name))
FROM
INNER JOIN Categories c2 ON cat.ParentCategoryFK = c2.CategoryID
)
SELECT
Categories
LEFT JOIN
LEFT JOIN
LEFT JOIN
ORDER BY Categories.SortOrder,
, , , , , . varchar SortOrder .