我有 SQL Server 2008,其中有一个名为 ProductCategories 的表,设计如下:
Id | Name | ParentId
71 PCs NULL
32 MACs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
11 Keyboard 2
7 Mouse 2
8 Screen 2
我想从此表中进行选择,并获得如下结果集:
Id | Name | ParentId
71 PCs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
32 MACs NULL
11 Keyboard 2
7 Mouse 2
8 Screen 2
我尝试了这个,但这显然首先给了我那些没有 ParentId 的:
WITH Hierarchy
AS
(
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
WHERE
T1.parentid IS NULL OR
T1.parentid IN (SELECT id from ProductCategories WHERE parentid IS NULL)
UNION ALL
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
INNER JOIN
Hierarchy TH ON TH.Id = T1.ParentId
)
select *
from Hierarchy
order by parentid
如果可以的话请帮助我:)
-- 不懂 SQL 的人
最佳答案
试试这个:
Select Id, Name, ParentId
From ProductCategories
Order By Coalesce(ParentId, Id),
Coalesce(ParentId, 0), Name
三个 Order By 谓词,
- Coalesce(ParentId, Id):此方法按父项对记录进行分组,包括父项本身和该父项的所有子项
- Coalesce(ParentId, 0) 在每个集合中进行分组,以便父级为空的一条记录排序到组内的顶部
- 名称,按名称对组内的子项进行排序
关于sql-server - SQL Server : Select Parent-Child,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399708/