目前有个表:层次ID,层次name,排序号,父id
层次id4位编码:比如0001 下一级就是00010001
排序号为1、2,不同级别之间排序号可以重复。
如何能够按照层次关系查出数据,并且按照排序号排序。
层次id4位编码:比如0001 下一级就是00010001
排序号为1、2,不同级别之间排序号可以重复。
如何能够按照层次关系查出数据,并且按照排序号排序。
解决方案 »
- 安装Oracle时,出现“实例化EM配置文件时出错”
- oracle创建存储过程 报错:pls-00103 : 出现符号 "create"
- 帮我看看这个语句
- Oracle 10G启动报错,启问能否提供解决方案?
- 【高手们请】如果我向数据库中某表批量导入了一批数据,最后我忘记了COMMIT(或永不提交,或放弃),这样子的话,
- 创建临时表的权限问题,急
- 怎么在C# 程序中执行Wrap 过的Oracle 存储过程阿?
- 请教一个SQL语句
- ORA-12514是什么错误?我一重启机器,配好的监听就报这个错?郁闷
- How a cursor scroll to first row
- 数据库回滚
- Oracle根据去掉某一字段相同值的记录
CCID CHAR(12) not null,
CCNAME VARCHAR2(100) not null,
PXH INTEGER
constraint PK_T primary key (CCID)
);
insert into t values('0001', '家用电器', 1 );
insert into t values('00010001', '小家电', 2 );
insert into t values('00010002', '大家电', 1 );
insert into t values('000100020001','洗衣机', 35 );
insert into t values('000100020002','平板电视', 30 );
insert into t values('000100020003','冰箱', 33 );
insert into t values('0002', '手机数码', 2 );
insert into t values('00020001', '手机通讯', 3 );
insert into t values('00020002', '手机配件', 2 );
insert into t values('00020003', '数码配件', 5 );
insert into t values('0003', '服饰鞋帽', 1 );
insert into t values('0004', '图书影视', 5 );
select * from t order by ccid, pxh排序是乱的。
有没有好的sql语句可以实现
不用排序号:select * from t start with ccid='0001' connect by prior ccid=trunc(ccid/10000) order by ccid
用排序号目前还没想出来。
用父id就这么写:
select * from t start with ccid='0001' connect by prior ccid=父id order siblings by ccid;
不用就这么写:
select * from t start with ccid='0001' connect by prior ccid=trunc(ccid/10000) order siblings by ccid;
另外没有实现按照排序号排序
这里
第2个sql写错了 应该是
select * from t start with ccid='0001' connect by prior ccid=trunc(ccid/10000) order siblings by pxh;
你第一个问题的原因是由于0002,0003和0001不是一颗树。
这个sql查询出来的是1个树的完整结构第二个原因就是我那个sql order by 写错了
搞定
实验了一下,完全正确。
另外我还想接着问一个问题,如果除了上面的要求,
再加上同时查出是否是叶节点,也就是说排序的同时,查出来来这个层次是否还有子节点,没有就是0,有就是1.
0是有;1是没有
你可以按照level排序