对要在层次结构视图中显示的值进行排序

时间:2014-09-17 15:43:54

标签: sql sql-server

我试图命令一个表在层次结构视图中显示它,并减少我的C#代码的麻烦。

我创建了一个简化的表格来展示我想要实现的目标:(fiddle)。

我有什么:

| id | parent | level |
|----|--------|-------|
|  2 | (null) |     1 |
|  7 |      2 |     2 |
|  8 |      2 |     2 |
|  9 |      7 |     3 |
| 12 |      7 |     3 |
| 14 |      9 |     4 |
| 15 |     12 |     4 |

我需要什么:

| id | parent | level |
|----|--------|-------|
|  2 | (null) |     1 |
|  7 |      2 |     2 |
|  9 |      7 |     3 |
| 14 |      9 |     4 |
| 12 |      7 |     3 |
| 15 |     12 |     4 |
|  8 |      2 |     2 |

所以我能够得到这个结果并直接发布如下:

ID
--02
----07
------09
--------14
------12
--------15
----08

1 个答案:

答案 0 :(得分:2)

这样的东西?

with MyCte as
(
    select id
        , parent
        , level 
        , CAST(ID as varchar(50)) as SortOrder
        from posts 
        where parent is null
    union all
    select p.id
        , p.parent
        , p.level
        , CAST(p2.SortOrder + '.' + right('000' + CAST(p.ID as varchar(10)), 3) as varchar(50))
    from posts p
    inner join MyCte p2 on p2.Id = p.parent
)

select *, 
replicate('-', level) + cast(id as varchar(10))
from MyCte
order by SortOrder