-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTraverse_The_Tree_v2.sql
More file actions
67 lines (58 loc) · 3.08 KB
/
Traverse_The_Tree_v2.sql
File metadata and controls
67 lines (58 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
DECLARE @CategoryID INT = 154940;
-- this will show the all the child categories of the category
WITH category AS(
SELECT tblCategoryRelationShip.ParentCategoryID
, tblCategoryRelationShip.CategoryID
, tlkCategoryStatus.Description AS CategoryStatus
, CategoryPath = CAST(tblCategoryRelationShip.CategoryID AS VARCHAR(8000))
, CategoryPathName = CAST(Name AS VARCHAR(8000))
, TreeLevel = 1
FROM tblCategoryRelationShip
INNER JOIN tblCategory ON tblCategoryRelationShip.CategoryID = tblCategory.CategoryID
INNER JOIN tlkCategoryStatus ON tlkCategoryStatus.CategoryStatusID = tblCategory.CategoryStatusID
WHERE tblCategoryRelationShip.CategoryID = @CategoryID
UNION ALL
SELECT parent.ParentCategoryID
, parent.CategoryID
, tlkCategoryStatus.Description AS CategoryStatus
, CategoryPath = CategoryPath + ' -> ' + CAST(parent.CategoryID AS VARCHAR(8000))
, CategoryPathName = CategoryPathName + ' -> ' + CAST(tblCategory.Name AS VARCHAR(8000))
, TreeLevel = TreeLevel + 1
FROM tblCategoryRelationShip parent
INNER JOIN category child ON child.CategoryID = parent.ParentCategoryID
INNER JOIN tblCategory ON parent.CategoryID = tblCategory.CategoryID
INNER JOIN tlkCategoryStatus ON tlkCategoryStatus.CategoryStatusID = tblCategory.CategoryStatusID
)
SELECT * FROM category
OPTION (maxrecursion 0);
-- this show all the "parent categories", also known as the category path
WITH category AS(
SELECT tblCategoryRelationShip.ParentCategoryID
, tblCategoryRelationShip.CategoryID
, tlkCategoryStatus.Description AS CategoryStatus
, CategoryPath = CAST(tblCategoryRelationShip.ParentCategoryID AS VARCHAR(8000)) + ' -> ' + CAST(tblCategoryRelationShip.CategoryID AS VARCHAR(8000))
, CategoryPathName = CAST(parentname.Name AS VARCHAR(8000)) + ' -> ' + CAST(tblCategory.Name AS VARCHAR(8000))
, TreeLevel = 2
FROM tblCategoryRelationShip
INNER JOIN tblCategory ON tblCategoryRelationShip.CategoryID = tblCategory.CategoryID
INNER JOIN tblCategory parentname ON tblCategoryRelationShip.ParentCategoryID = parentname.CategoryID
INNER JOIN tlkCategoryStatus ON tlkCategoryStatus.CategoryStatusID = tblCategory.CategoryStatusID
WHERE tblCategoryRelationShip.CategoryID = @CategoryID
UNION ALL
SELECT parent.ParentCategoryID
, parent.CategoryID
, tlkCategoryStatus.Description AS CategoryStatus
, CategoryPath = CAST(parent.ParentCategoryID AS VARCHAR(8000)) + ' -> ' + CategoryPath
, CategoryPathName = CAST(tblCategory.Name AS VARCHAR(8000)) + ' -> ' + CategoryPathName
, TreeLevel = TreeLevel + 1
FROM tblCategoryRelationShip parent
INNER JOIN category child ON child.ParentCategoryID = parent.CategoryID
INNER JOIN tblCategory ON parent.ParentCategoryID = tblCategory.CategoryID
INNER JOIN tblCategory childcat ON childcat.CategoryID = child.ParentCategoryID
INNER JOIN tlkCategoryStatus ON tlkCategoryStatus.CategoryStatusID = childcat.CategoryStatusID
)
SELECT * FROM category
ORDER BY TreeLevel
OPTION (maxrecursion 0)