网络编程
位置:首页>> 网络编程>> 数据库>> oracle sys_connect_by_path 函数 结果集连接

oracle sys_connect_by_path 函数 结果集连接

 来源:asp之家 发布时间:2009-07-12 18:48:00 

标签:oracle,sys_connect_by_path

以前看过有人转换过的,当时仅仅惊叹了一下,就过去了,没有记下来,直至于用到的时候呢,开始到处找,找来找去都没有找不到痕迹了,心里也就郁郁寡欢呀。

今天无意间,看connect by的使用,看到了sys_connect_by_path的用法,算是给我一个另类的惊喜了,sys_connect_by_path(columnname, seperator) 也可以拼出串来,不过这个函数本身不是用来给我们做这个结果集连接用的,而是用来构造树路径的,所以需要和connect by一起来用。

呵呵呵,在这里嚣张了一把,基于对oracle的一些函数的了解的基础上,看我是怎样硬生生的把一个没有树结构的普通表或者结果集做出我们想要的东西来。

magic is start.

道具,一个普通表,就一个字段 name, 姑且叫表名为test_sysconnectbypath吧,表名太长,嘻嘻,不怕,别名之。
以下为该表数据
NAME
------------------
深圳
武汉
上海
北京
天津
新加坡
别名之
SQL>with temp as (select name form test_sysconnectbypath);

这是别名的写法,我们下面的sql语句就可以用temp来代替这个结果集。当然这个()里面可以是你自己的复杂查询出来的结果集也行

第一变性开始,把这个变成有树形结构的

怎么才能变形成树结构了,大家马上想到,加一个pid,和id才行哟,这里没有,我们就给他们加上吧。不过,加了id,怎么来填他们的结构数据呢,这里需要另一个函数显圣了 lag() , lag() 是取前记录, 和lead相对, 如果是简单的拼的话,树结构不就是,上一条记录就是下一条记录的父节点了么

这样我们用rownum,不就.... OK了
action
select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp) t;
结果出来了
NAME NO PID
-------------------- ---------- ----------
深圳 1
武汉 2 1
上海 3 2
北京 4 3
天津 5 4
新加坡 6 5
现在就是个树形了吧。
再变树
action
select * from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid;
看看结果吧
结果出来了
NAME NO PID
-------------------- ---------- ----------
深圳 1
武汉 2 1
上海 3 2
北京 4 3
天津 5 4
新加坡 6 5
奇怪结果没有变哟,是的,这里只是把树给选出来了,你如果加个lpad(' ', 4*level, '*')||name就可以看出端倪了
最后一变,拼成串
select sys_connect_by_path(name. ',') text from (select t.name, no, lag(no) over(order by no) pid from (select temp.*, rownum no from temp)) t start with pid is null connect by prior no=pid;
你们自己看结果吧。
Text
--------------------------------------------------
深圳,武汉,上海,北京,天津,新加坡
......
呵呵呵,虽然是做出来来,但是就像上面说讲的,这里只是另类的喜悦,因为这个不是我以前看到的那个解决方案,不过是通过这个方法,有用到了强大的connect by已经分析函数over,仅是窃喜,
找寻工作还要继续,什么时候才很然给我拨开云雾找到你哟。

0
投稿

猜你喜欢

  • 相信没有人不知道 Firebug 是什么东西,但有时候我们糟糕的代码不想让同行轻松的使用 F12 就能一览无遗。那么怎么办呢?这里有个猥琐的
  • 一个小代码 类似资源管理器效果 支持鼠标拖拽 没写些细节东西  JavaScript语言:
  • # 建表CREATE TABLE `T_TEST` (  `Id` int(11) NOT NULL AUTO_INCREMENT
  • asp中利用XMLhttp对象获取远程的数据,然后用二进制输出到客户浏览器,让客户下载数据,此例从某一远程服务器获取一个压缩包,并且输出到浏
  • 当今,有一点可以肯定的是,设计的领域在扩大,这是一个需要设计的世界。拒最新的统计资料显示,中国目前已有正规的设计学院教学机构700多所,并且
  • Access爱好者以会VBa为荣。我觉得这不是好现象。vba只是vb的子集,有着很多限制,比如不支持继承,不支持指针,不支持子界类型等。使用
  • 这个话题是应腾讯ISD同仁之邀在WebReBuild三周年交流会上做的主题分享。由于临场等原因有些问题当时没有讲明白,回来后按原有思路形成了
  • 如何限制重复订阅邮件或投票?一、准备子程序和函数。1、初始化数据,在Session对象中保存两个变量:Sub InitializeFID()
  • 我们可以用动态产生变量的方法,从表格里捕捉数据,动态地创造“剥离”变量引号并且“清理”它,见下列代码,我们只需键入变量名称,选择 query
  • 我认为在ASP中最好的办法是用编程实现定时刷新Cache,也就是说给Application中储存的设一个过期时间。当然,在ASP中Appli
  • ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0)mysql> select ASCII(
  • 设计师不等于美工设计无所不在,但大多数企业不知道如何使用它。现代设计进入中国大概是二十多年的时间,而在国外,尤其在美国在欧洲,大概有一百年的
  •    <!--  -----------[test]表生成脚本---------------
  • 本文介绍了6个asp常用的判断函数的语法和使用方法,有IsArray 函数,IsDate 函数 ,IsEmpty 函数,IsNull 函数,
  • A.截取从字符串左边开始N个字符 Declare @S1 varchar(100) Select @S1='http://www.x
  • 返回首页的链接地址,有三种方法:1、一般方法是,直接写对应的域名地址,<a href="http://www.zfnn.co
  • 基于很多原因,有不少朋友的空间不支持FSO,当大量的页面生成静态页面时,占用大量的空间,修改样式时,不方便,所以动态页面还是有动态页面的好处
  • 很久以前就知道微软的Petshop的很经典,昨天抽出时间去学习,一开始还真的不适应,什么成员资格,还真的看不太懂,运行petshop想从登陆
  •  删除重复记录,将TABLE_NAME中的不重复记录保存到#TABLE_NAME中select distinct&nbs
  •     Dreamweaver(以下简称DW)提供了一种称为“Behavior”(行为)的机制,帮助你构建页面
手机版 网络编程 asp之家 www.aspxhome.com