12
返回列表 发新帖
楼主: fage090

[PL/SQL] 请教一个排序问题

[复制链接]
论坛徽章:
169
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
11#
发表于 2017-1-9 17:26 | 只看该作者
fage090 发表于 2017-1-9 17:24
感谢bell6248 版主,学习了。用connect_by_root(t1.name)真是妙。
     有个疑问,where t1.line_ ...

其实就是把那个t2的顺序搞出来。

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2016-11-25 16:52:36
12#
 楼主| 发表于 2017-1-9 17:37 | 只看该作者
我稍微改了下题目,,t2表的优先级高。。要t2表排序有基础。

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2016-11-25 16:52:36
13#
 楼主| 发表于 2017-1-9 18:19 | 只看该作者
Naldonado 发表于 2017-1-9 17:26
其实就是把那个t2的顺序搞出来。

Naldonado版主和bell6248 版主的方法有异曲同工之处。不过你那脚本好像有问题。tmp02表里面的CONNECT_BY_ROOT(name),在row_number() over的排序里就出问题了,全部是A02。
最后得出的结果也有问题。

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
14#
发表于 2017-1-9 18:21 | 只看该作者
fage090 发表于 2017-1-9 17:24
感谢bell6248 版主,学习了。用connect_by_root(t1.name)真是妙。
     有个疑问,where t1.line_ ...






LZ, 你在测试一下如下的代码是否有问题, 如果还是有问题, 还是用具体数据来举例

SQL> select * from t1;

  LINE_NUM DEPT NAME
---------- ---- ---------
         1 AA   A01
         2 AA   A02
         3 AA   A03
         4 A02  Lilei
         5 A02  Wangli
         6 A03  Zhangfang
         7 A02  Luoxx
         8 A03  Sunxx
         9 A03  Hexx
        10 A01  Xexx

10 rows selected

SQL> select * from t2;

  LINE_NUM DEPT NAME
---------- ---- ---------
         1 AA   A02
         2 A02  Wangli
         3 A02  Lilei
         4 AA   A03
         5 A03  Zhangfang

SQL>
SQL> select t1.dept,
  2         t1.name
  3    from t1, t2
  4   where t1.dept = t2.dept(+)
  5     and t1.name = t2.name(+)
  6   start with t1.dept = 'AA'
  7  connect by prior t1.name = t1.dept
  8   ORDER SIBLINGS BY t2.line_num, t1.line_num;

DEPT NAME
---- ---------
AA   A02
A02  Wangli
A02  Lilei
A02  Luoxx
AA   A03
A03  Zhangfang
A03  Sunxx
A03  Hexx
AA   A01
A01  Xexx

10 rows selected

SQL>



使用道具 举报

回复
论坛徽章:
169
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
15#
发表于 2017-1-9 19:22 | 只看该作者
fage090 发表于 2017-1-9 18:19
Naldonado版主和bell6248 版主的方法有异曲同工之处。不过你那脚本好像有问题。tmp02表里面的CONNECT_BY_ ...

哈哈,我没验证,凑了个结果。。。我这结果貌似是对的,难道我眼quan了?其实就是为了t2的顺序给个说法

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
16#
发表于 2017-1-9 23:14 | 只看该作者
半天看不懂规则,在楼顶的最终结果中,“AA        A01”和"A02        Luoxx"都是t2中没有的,但是第一个被排到后面去了,第二个却可以加在中间,不知道是什么道理。

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2016-11-25 16:52:36
17#
 楼主| 发表于 2017-1-10 08:35 | 只看该作者
bell6248 发表于 2017-1-9 18:21
LZ, 你在测试一下如下的代码是否有问题, 如果还是有问题, 还是用具体数据来举例

SQL> s ...

原来还有这个排序ORDER SIBLINGS BY,以前还没有接触过,学习了!要的就是这个效果。
谢谢了

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2016-11-25 16:52:36
18#
 楼主| 发表于 2017-1-10 08:41 | 只看该作者
newkid 发表于 2017-1-9 23:14
半天看不懂规则,在楼顶的最终结果中,“AA        A01”和"A02        Luoxx"都是t2中没有的,但是第一个被排到后面去了 ...

t1的数据包含t2。我想让t1表按层次排序,而且属于t2的那部分数据要优先排在最前。
用bell6248版主给的ORDER SIBLINGS BY排序就可以实现了,以前没学会这个。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表