with CteRec as
(
select
c.ID,
c.CategoryName,
Cast(c.DisplayOrder as float) as ParentDisplayOrder,
0 as DisplayOrder,
c.ParentCategoryID,
c.ID as MainID,
1 as LevelNo
from tblCategory as c
where (c.ParentCategoryID is null)
union all
select
c.ID,
c.CategoryName,
r.ParentDisplayOrder + (Cast(c.DisplayOrder as float) / Power(10, r.LevelNo)) as ParentDisplayOrder,
c.DisplayOrder,
c.ParentCategoryID,
r.MainID,
r.LevelNo + 1 as LevelNo
from tblCategory as c
join CteRec as r on r.ID = c.ParentCategoryID
where r.MainID = @ID and r.LevelNo < @LevelNo
)
select * from CteRec
order by ParentDisplayOrder
silvioyf
Participant
1754 Points
340 Posts
Re: selecting my categories
Apr 06, 2012 06:30 PM|LINK
Try:
with CteRec as ( select c.ID, c.CategoryName, Cast(c.DisplayOrder as float) as ParentDisplayOrder, 0 as DisplayOrder, c.ParentCategoryID, c.ID as MainID, 1 as LevelNo from tblCategory as c where (c.ParentCategoryID is null) union all select c.ID, c.CategoryName, r.ParentDisplayOrder + (Cast(c.DisplayOrder as float) / Power(10, r.LevelNo)) as ParentDisplayOrder, c.DisplayOrder, c.ParentCategoryID, r.MainID, r.LevelNo + 1 as LevelNo from tblCategory as c join CteRec as r on r.ID = c.ParentCategoryID where r.MainID = @ID and r.LevelNo < @LevelNo ) select * from CteRec order by ParentDisplayOrderex: @ID = 2 (Non-Beverages) and @LevelNo = 3
I hope this helps.