我喜欢在上面演示了查询,但我不知道如何订购此查询,我希望得到的结果是这样的:
Name
-----
Menu_1
-------
..... Sub_Menu_1
-------
Menu_2
-------
..... Sub_Menu_2
-------
..........Sub_Sub_Menu_2
-------
Menu_3
-------
我该怎么办这个?感谢
编辑(从SQLFiddle演示资讯)
表:
CREATE TABLE Menus
(
IdMenu int primary key,
IdParentMenu varchar(20),
Name varchar(30)
);
数据:
INSERT INTO Menus
(IdMenu, IdParentMenu, Name)
VALUES
('1', '0', 'Menu_1'),
('2', '0', 'Menu_2'),
('3', '0', 'Menu_3'),
('4', '1', 'SubMenu_1'),
('5', '2', 'SubMenu_2'),
('6', '5', 'Sub-SubMenu_2');
我的查询:
WITH MenuCTE (IdMenu, IdParentMenu, ParentMenu, Name, Lvl)
AS
(
-- Anchor member
SELECT m.IdMenu, m.IdParentMenu, CAST('' AS varchar) AS ParentMenu, m.Name, 0 AS Lvl
FROM dbo.Menus AS m
WHERE CAST(m.IdParentMenu AS INT) = 0
UNION ALL
-- Recursive member
SELECT m.IdMenu, m.IdParentMenu, CAST(mc.Name AS varchar) AS ParentMenu, m.Name, Lvl + 1 AS Lvl
FROM dbo.Menus AS m
INNER JOIN MenuCTE AS mc
ON CAST(m.IdParentMenu AS INT) = mc.IdMenu
)
SELECT IdMenu, IdParentMenu, ParentMenu, REPLICATE('....', Lvl) + Name
FROM MenuCTE
--WHERE Lvl > 0
ORDER BY IdParentMenu
GO
下一次请包括演示(或任何外部链接)的(相关)信息,这可以让进一步的读者了解远程数据不可用时的问题或答案。 – Pred