sql - ORA-30929: 此处不允许使用 ORDER SIBLINGS BY 子句
问题描述
我正在尝试编写一个 SQL 来显示分层模式。我的第一次尝试对单个数据很好,因为以下 SQL 有效。
SELECT CONCAT (LPAD (' ',LEVEL*3-3), M.MODULE) MODULE,M.ABBREVIATION,M.PARENT
FROM MRS_CUSTOM.CL_MODULES M
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
ORDER SIBLINGS BY M.MODULE;
此 sql 将显示以下内容:
Admissions ADMIS
Admissions Correspondence ADMCO ADMIS
Agent Interface to Applicant Portal ADAIAP ADMIS
Applicant Portal ADMP ADMIS
Statistics APSTAT ADMP
My.Application Portal MYAP ADMIS
Precedents ADMIS_PRD ADMIS
Selection Process Management SPM ADMIS
Advanced Standing ADVSTG
Precedents ADVSTG_PRD ADVSTG
Archive Module AM
现在我需要附加到这个
select (CONCAT (LPAD (' ',LEVEL*3-3), M.MODULE))
MODULE,M.ABBREVIATION,M.PARENT,count(distinct(RS.REPORT_ID)) as
NUM_REPORTS,count(distinct(MP.DB_ROLE)) as NUM_ROLES
from MRS_CUSTOM.CL_MODULES M, MRS_CUSTOM.CL_MODULE_PRIVS MP, MRS_CUSTOM.CL_REPORT_SPECS RS
where M.ABBREVIATION = RS.MODULE(+) and
M.ABBREVIATION = MP.ABBREVIATION(+)
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
group by M.ABBREVIATION, M.MODULE, M.PARENT
ORDER SIBLINGS BY M.MODULE;
但我得到错误
ORA-30929: ORDER SIBLINGS BY clause not allowed here
解决方案
可以先做join,再对join的结果进行层次查询:
SELECT CONCAT (LPAD (' ',LEVEL*3-3), M.MODULE) MODULE, M.ABBREVIATION, M.PARENT,
M.NUM_REPORTS, M.NUM_ROLES
FROM (
select M.MODULE, M.ABBREVIATION, M.PARENT,
count(distinct(RS.REPORT_ID)) as NUM_REPORTS,
count(distinct(MP.DB_ROLE)) as NUM_ROLES
from MRS_CUSTOM.CL_MODULES M
left join MRS_CUSTOM.CL_REPORT_SPECS RS
on RS.MODULE = M.ABBREVIATION
left join MRS_CUSTOM.CL_MODULE_PRIVS MP
on MP.ABBREVIATION = M.ABBREVIATION
group by M.ABBREVIATION, M.MODULE, M.PARENT
) M
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
ORDER SIBLINGS BY M.MODULE;
我已经切换到 ANSI 连接语法,而不是 Oracle 的旧式连接。
db<> 摆弄一些疯狂的数据。
推荐阅读
- python - Python - 在 CSV 或 XLS 中匹配的正则表达式,并返回匹配的位置
- java - Android Studio androidx.coordinatorlayout error and how to set up 3Dot Menu?
- string - Oracle SQL:我应该如何识别字符串的长度?
- flash - Adobe Air 错误 #3001:文件或目录访问被拒绝
- python - Python中的偏相关
- docker - 如何在离线环境中同时使用 swagger-editor 和 swagger-codegen docker 镜像
- r - geom_dot 为不同的组提供不同的点大小并将一个放在前面
- r - R - 从现有列值创建和命名数据框
- android - 用 constrainLayout 替换滚动视图中的加权线性布局
- python - 类实例是否在后台持续存在?