sql - 来自 sql server 的父子结果?

标签 sql sql-server

<分区>

我有一个表 category 如下:

id      title      ParentID
1       C1          0
2       C2          0
3       C3          0
4       C4          2
5       C5          1
6       C6          3
7       C7          4

我想要的结果是

id  title      ParentID   Level
1   C1          0         0
5   C5          1         1
2   C2          0         0
4   C4          2         1
7   C7          4         2  
3   C3          0         0
6   C6          3         1

我怎样才能得到这个结果?

订单说明:我想要结果中的项目低于其父项目。

最佳答案

此答案假定您使用的是 SQL Server 2008 或更高版本。

使用递归 CTE 并构建您在订单中使用的 ID 字符串作为 hierarchy id .

with C as
(
  select id,
         title,
         parentid,
         '/'+cast(id as varchar(max))+'/' as sort,
         1 as lvl
  from YourTable
  where parentid = 0
  union all
  select T.id,
         T.title,
         T.parentid,
         C.sort + cast(T.id as varchar(10)) + '/',
         C.lvl + 1
  from YourTable as T
    inner join C
      on T.parentid = C.id
)
select id,
       title,
       parentid,
       lvl,
       sort
from C
order by cast(sort as hierarchyid)

SQL Fiddle

关于sql - 来自 sql server 的父子结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605819/

相关文章:

java - 如何从 Java 中的 txt 文件中读取 sql 查询

php - 帖子不会从数据库中删除

mysql - 如何在两列上设置唯一键并在 MySQL 中仍然具有自动递增的主索引?

SQL Server 各种数据类型的四列组合键

SQL 为每个属性添加总计行

sql - 将 2 个表的日期范围合并为一个表

php - 按组合连接排序

sql - 在 Rails 3/ActiveRecord 中构建 LIKE 查询时转义 %% 的正确方法

sql-server - Spark 在执行 jdbc 保存时给出空指针异常

SQL Server : selecting rows that contain only certain values?