首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在保持行的层次结构的同时对表进行排序

在保持行的层次结构的同时对表进行排序
EN

Stack Overflow用户
提问于 2015-05-27 13:23:31
回答 1查看 86关注 0票数 0

我有一张表,代表各部门的等级:

代码语言:javascript
复制
+-----------+--------------+--------------+--------------+-----------+-------+
| Top Dept. | 2-tier Dept. | 3-tire Dept. | 4-tier Dept. |    name   |  tier |
+-----------+--------------+--------------+--------------+-----------+-------+
|        00 |              |              |              |    abc    |   0   |
|           | 00-01        |              |              |    bcd    |   1   |
|           |              | 00-01-01     |              |    cde    |   2   |
|           |              | 00-01-02     |              |    abc    |   2   |
|           | 00-02        |              |              |    aef    |   1   |
|           |              | 00-02-01     |              |    qwe    |   2   |
|           |              | 00-02-03     |              |    abc    |   2   |
|           |              |              | 00-02-03-01  |    abc    |   3   |
+-----------+--------------+--------------+--------------+-----------+-------+

现在,我想按它们的名称对同层中的行进行排序,同时保持总体的层次结构,这就是我所期望的:

代码语言:javascript
复制
+-----------+--------------+--------------+--------------+-----------+-------+
| Top Dept. | 2-tier Dept. | 3-tire Dept. | 4-tier Dept. |    name   |  tier |
+-----------+--------------+--------------+--------------+-----------+-------+
|        00 |              |              |              |    abc    |   0   |
|           | 00-02        |              |              |    aef    |   1   |
|           |              | 00-02-03     |              |    abc    |   2   |
|           |              | 00-02-01     |              |    qwe    |   2   |
|           | 00-01        |              |              |    def    |   1   |
|           |              | 00-01-02     |              |    abc    |   2   |
|           |              | 00-01-01     |              |    cde    |   2   |
|           |              |              | 00-02-03-01  |    abc    |   3   |
+-----------+--------------+--------------+--------------+-----------+-------+

丢失的数据意味着null,我使用的是Oracle DB,有人能帮我吗?

编辑:实际上,它是此sql的一个简单版本,我尝试添加一个新列,它连接前四列的值,然后按它和名称排序,但是它没有工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-27 15:25:36

更新:这看起来很有效..。SQL Fiddle

从我最初的评论中,真正需要的是在两个选择中按照这个顺序将名称修改为部门。这允许引擎先按名称排序,同时维护层次结构。

代码语言:javascript
复制
WITH cte(Dept, superiorDept, name, depth, sort)AS (
SELECT 
  Dept,
  superiorDept,
  name,
  0,
  name|| dept
FROM hierarchy h
WHERE superiorDept IS NULL

UNION ALL

SELECT 
  h2.Dept,
  h2.superiorDept,
  h2.name,
  cte.depth + 1,
  cte.sort || h2.name ||h2.dept
FROM hierarchy h2
INNER JOIN cte ON h2.superiorDept = cte.Dept
)

SELECT 
  CASE WHEN depth = 0 THEN Dept END AS 一级部门,
  CASE WHEN depth = 1 THEN Dept END AS 二级部门,
  CASE WHEN depth = 2 THEN Dept END AS 三级部门,
  CASE WHEN depth = 3 THEN Dept END AS 四级部门,
  name,
  depth,
  sort
FROM cte
ORDER BY sort, name
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30483809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档