Oracle层级结构查询求助:实现DNO仅单次显示的分层输出
Oracle层级展示:同部门DNO仅首行显示的实现
要实现同DNO仅首行显示、后续行DNO为空的分层效果,可借助Oracle的**窗口函数ROW_NUMBER()**来实现,具体方案如下:
核心逻辑
- 用
ROW_NUMBER()按DNO分区排序,给每个部门内的记录分配独立行号 - 根据行号判断:行号为1时显示原
DNO值,否则显示NULL
完整查询语句
SELECT CASE WHEN rn = 1 THEN DNO ELSE NULL END AS DNO, ENAME, SAL FROM ( SELECT DNO, ENAME, SAL, ROW_NUMBER() OVER (PARTITION BY DNO ORDER BY ENAME) AS rn FROM EMP ) ORDER BY DNO, rn;
预期输出结果
| DNO | ENAME | SAL |
|---|---|---|
| 101 | John | 3000 |
| Michael | 2500 | |
| Scott | 4000 | |
| 102 | James | 3500 |
| Smith | 1500 | |
| Williams | 2000 | |
| 103 | Andrew | 1000 |
| Becker | 4500 |
补充说明
PARTITION BY DNO会将数据按部门分组,每个组内单独计算行号ORDER BY ENAME用于指定部门内记录的排序规则,可根据需求替换为SAL或其他字段- 外层
ORDER BY DNO, rn保证结果按部门和行号顺序输出,维持分层结构
内容的提问来源于stack exchange,提问作者Rupa
相关产品推荐
相关产品推荐

