当前位置: 代码迷 >> Sql Server >> 子节点和父节点想弄在一起,麻烦各位,帮小弟我一下,多谢
  详细解决方案

子节点和父节点想弄在一起,麻烦各位,帮小弟我一下,多谢

热度:69   发布时间:2016-04-24 09:05:50.0
子节点和父节点想弄在一起,麻烦各位,帮我一下,谢谢
比如一个表 
id            name      parentId
1              a                0
2              b                4
3              c                 1
4              d                 0
5              e                  6
6                f                 0
7               g                 1
我想要的结果是:
id            name      parentId
1              a                0
3              c                 1
7               g                 1
4              d                 0
2              b                4
6                f                 0
5              e                  6

备注:1、只有一级结构  每个根节点只有子节点,不会有孙子节点
             2、不要用函数、存储过程之类的
              

------解决思路----------------------
用一个特殊的排序语句即可
order by case when parentid=0 then id*1000000 else parentid*1000000+id end

------解决思路----------------------
SELECT * FROM TB
ORDER BY CASE WHEN parentId=0 THEN id ELSE parentId END,parentId,ID
如果有孙节点,可以用CTE递归一下,再排序
------解决思路----------------------
WITH t1 AS ( -- 第一级
    SELECT *,
           id AS topid
      FROM table1
     WHERE parentid = 0
)
,t2 AS ( -- 第二级
    SELECT table1.*,
           t1.id AS topid
      FROM t1
      JOIN table1
        ON t1.id = table1.parntid
)
    SELECT id, name, parentid
      FROM (SELECT * FROM t1
            UNION ALL
            SELECT * FROM t2
           ) t
  ORDER BY topid, id
  相关解决方案