表test 字段
a1 a2
1 a
1 b
2 x
2 y
2 z

查询的结果要求

1 ab
2 xyz

SQL> with b as (select 1 a1,'a' a2 from dual
2 union
3 select 1 a1,'b' a2 from dual
4 union
5 select 2 a1,'x' a2 from dual
6 union
7 select 2 a1,'y' a2 from dual
8 union
9 select 2 a1,'z' a2 from dual
10 )
11 select a1,max(sys_connect_by_path(a2,' ')) aa from
12 (select a1,a2,row_number()over(partition by a1 order by a1,a2) rn from b)
13 start with rn=1
14 connect by rn-1=prior rn
15 group by a1
16 ;

A1 AA
---------- --------------------------------------------------------------------------------
1 x b
2 x y z

當加了ROWNUM后

SQL> with b as (select 1 a1,'a' a2 from dual
2 union
3 select 1 a1,'b' a2 from dual
4 union
5 select 2 a1,'x' a2 from dual
6 union
7 select 2 a1,'y' a2 from dual
8 union
9 select 2 a1,'z' a2 from dual
10 )
11 select a1,max(sys_connect_by_path(a2,' ')) aa from
12 (select a1,a2,rownum rnum,row_number()over(partition by a1 order by a1,a2) rn from b)
13 start with rn=1
14 connect by rnum-1=prior rnum
15 group by a1
16 ;

A1 AA
---------- --------------------------------------------------------------------------------
1 a b
2 x y z

或者這樣也可以

select A1,MAX(SYS_CONNECT_BY_PATH(A2,' ')) A2 from
(SELECT A2,A1,ROW_NUMBER()OVER(PARTITION BY A1 ORDER BY A1,A2) RN FROM B) C
START WITH RN=1
CONNECT BY rn-1=prior rn and a1=prior a1
GROUP BY A1

主要是在CONNECT BY rn-1=prior rn and a1=prior a1,對分組的字段進行CONNECT BY

例三:

有一个通用表如下:
TYPE_CODE TYPE_NAME
01                       XX学校
0101   XX班级
010101 XX学生

请问怎么用SQL方便的查出以下记录:

XX学校 XX班级 XX学生

WITH A AS (SELECT '01' ID,'XX學校' ADDRESS FROM DUAL
UNION
SELECT '0101' ID,'XX班級' ADDRESS FROM DUAL
UNION
SELECT '010101' ID,'XX學生' ADDRESS FROM DUAL
)

SELECT MAX(SYS_CONNECT_BY_PATH(B.ADDRESS,' ')) DD FROM (select ID,ADDRESS,ROW_NUMBER()OVER(PARTITION BY SUBSTR(ID,1,2) ORDER BY ID) RN
from A ) B
START WITH B.RN=1
CONNECT BY B.RN-1=PRIOR B.RN

/*Start with 开始位置,connect by prior 子节点=父节点;
必须使用prior引用父行
sys_connect_by_path(userid, ',')之间用','分割*/
With x As (
SELECT 'test_1' NAME, 'test1' userid FROM dual UNION ALL
SELECT 'test_1' NAME, 'test2' userid FROM dual UNION ALL
SELECT 'test_2' NAME, 'test1' userid FROM dual UNION ALL
SELECT 'test_2' NAME, 'test2' userid FROM dual UNION ALL
SELECT 'test_3' NAME, 'test1' userid FROM dual UNION ALL
SELECT 'test_3' NAME, 'test2' userid FROM dual UNION ALL
SELECT 'test_4' NAME, 'test1' userid FROM dual )

select Name, substr(max(sys_connect_by_path(userid, ',')),2) userid
from (select Name,
userid,
row_number() over(partition by Name order by userid) rn
from x)
start with rn = 1
connect by rn - 1 = prior rn
And Name = Prior Name
group by Name
order by Name;

WITH A AS (SELECT 1 ID,'硬件' TITLE,0 PARENTID FROM DUAL
               UNION ALL
               SELECT 2 ID,'外設' TITLE,1 PARENTID FROM DUAL
               UNION ALL
               SELECT 3 ID,'打印機' TITLE,2 PARENTID FROM DUAL
               UNION ALL
               SELECT 4 ID,'軟件' TITLE,0 PARENTID FROM DUAL
               UNION ALL
               SELECT 5 ID,'惠普打印機' TITLE,3 PARENTID FROM DUAL
               UNION ALL
               SELECT 6 ID,'存儲器' TITLE,1 PARENTID FROM DUAL
               UNION ALL
               SELECT 7 ID,'系統軟件' TITLE,4 PARENTID FROM DUAL
               UNION ALL
               SELECT 8 ID,'外存儲器' TITLE,6 PARENTID FROM DUAL
               UNION ALL
               SELECT 9 ID,'內存儲器' TITLE,6 PARENTID FROM DUAL
               UNION ALL
               SELECT 10 ID,'硬盤' TITLE,8 PARENTID FROM DUAL
               )
   select LPAD(' ',PARENTID)||TITLE from A
   START WITH PARENTID=0
   CONNECT BY PARENTID=PRIOR ID

LPAD('',PARENTID)||TITLE
--------------------------------------------------------------------------------
硬件
 外設
  打印機
   惠普打印機
 存儲器
      外存儲器
        硬盤
      內存儲器
軟件
    系統軟件
 
10 rows selected

列出從ID1出發到ID2的所有路線

SQL> WITH A AS (SELECT 'A' ID1,'B' ID2,1000 JL FROM DUAL
  2             UNION
  3             SELECT 'A' ID1,'C' ID2,1100 JL FROM DUAL
  4             UNION
  5             SELECT 'A' ID1,'D' ID2,900 JL FROM DUAL
  6             UNION
  7             SELECT 'A' ID1,'E' ID2,400 JL FROM DUAL
  8             UNION
  9             SELECT 'B' ID1,'D' ID2,300 JL FROM DUAL
 10             UNION
 11             SELECT 'D' ID1,'F' ID2,600 JL FROM DUAL
 12             UNION
 13             SELECT 'E' ID1,'A' ID2,400 JL FROM DUAL
 14             UNION
 15             SELECT 'F' ID1,'G' ID2,1000 JL FROM DUAL
 16             UNION
 17             SELECT 'C' ID1,'B' ID2,600 JL FROM DUAL
 18             )
 19  select ID1,SYS_CONNECT_BY_PATH(ID1,'->')||'->'||ID2 RN
 20  from A
 21  START WITH ID1='A'
 22  CONNECT BY NOCYCLE ID1=PRIOR ID2 AND ID2<>'A'
 23  /
 
ID1 RN
--- --------------------------------------------------------------------------------
A   ->A->B
B   ->A->B->D
D   ->A->B->D->F
F   ->A->B->D->F->G
A   ->A->C
C   ->A->C->B
B   ->A->C->B->D
D   ->A->C->B->D->F
F   ->A->C->B->D->F->G
A   ->A->D
D   ->A->D->F
F   ->A->D->F->G
A   ->A->E
 
13 rows selected

有张表a中有两个字段,id,num_begin ,num_end表示起始号码和终止号码,数据如下:
id    num_begin    num_end
1     12                   15
2     40                   45

求一个sql,得到如下结果
id   num
1   12
1   13
1   14
1   15
2   40
2   41
2   42
2   43
2   44
2   45

with c as (select 1 id,12 num_begin,15 num_end from dual
           union
           select 2 id,40 num_begin,45 num_end from dual
           )

select c.id,b.lvl from jim.c, (select level lvl from dual connect by level<=45) b
where  b.lvl between c.num_begin and c.num_end

1 12
1 13
1 14
1 15
2 40
2 41
2 42
2 43
2 44
2 45

connect by 說明每行數據將是按層次順序進行檢索.當要把一行轉換成多行的時候就要用到這個!

SQL> WITH A AS (SELECT '1 2 3' ID FROM DUAL
  2             UNION
  3             SELECT '4 5 6' ID FROM DUAL
  4             UNION
  5             SELECT '4 6 9' ID FROM DUAL
  6             )
  7  SELECT * FROM
  8  (select  SUBSTR(ID,LEV,1) RN from
  9  (select DISTINCT LEVEL LEV,ID FROM A
 10  CONNECT BY LEVEL<=LENGTH(ID)
 11  ORDER BY ID,LEV))
 12  WHERE NVL(RN,' ')<>' '
 13  /
 
RN
--
1
2
3
4
5
6
4
6
9
 
9 rows selected

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10768286/viewspace-83477/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10768286/viewspace-83477/

START WITH 的用法相关推荐

  1. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  2. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  3. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  4. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  6. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  7. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  8. Dorado用法与示例

    Dorado用法与示例 dorado用后总结 一.dorado概念 dorado的产品全名是"dorado展现中间件".从产品形态上dorado由两部分组成,第一部分是一个具有AJ ...

  9. TensorFlow用法

    TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...

  10. TensorFlow Keras API用法

    TensorFlow Keras API用法 Keras 是与 TensorFlow 一起使用的更高级别的作为后端的 API.添加层就像添加一行代码一样简单.在模型架构之后,使用一行代码,可以编译和拟 ...

最新文章

  1. 钉钉内部视频遭曝光:疯子无招“逼疯”产品经理
  2. 关于CKeditor的个性应用设置 转
  3. 数据结构之内部排序算法总结笔记
  4. 苹果手机处理器_全球最强手机处理器诞生!苹果A14主频首超3GHz:性能秒杀华为/高通...
  5. 七月算法机器学习1 机器学习初识
  6. 射频中的回波损耗,反射系数,电压驻波比以及S参数的含义和关系
  7. 十年后相遇,才解开了当初的误会
  8. 10个好用的免费图片网站,绝对能在2021年设计上好帮手
  9. 服务器pd接口不显示,服务器新盘无法识别(JBOD)
  10. centos:/usr/bin/perl is needed by mysql-community-server
  11. 记坑Method threw ‘feign.RetryableException‘ exception.
  12. DFS序——树链剖分前驱知识
  13. 为什么从此电脑访问不了ftp_蓝奏云网盘为什么访问不了?(附资源)
  14. css背景图做水印,css给图片添加水印的方法
  15. 三方协议,劳动合同,劳务合同的区别
  16. 计算机电源直接连接哪两根线才能开机,电脑电源开关线是哪两根
  17. SpringMVC从入门到精通(终结版)
  18. 成都Java开发培训多少钱?贵不贵?
  19. sql获取当前时间前后5天
  20. tengine2.2.2 升级http2.0 后 springmvc 上传附件为空的,可能存在的原因

热门文章

  1. 使用xlsx.js完成Excel批量数据导入
  2. 图书馆借阅管理系统 springboot开发的java项目源码
  3. 2023考研常识之在职人员考研需要注意哪些问题?
  4. 基于Android校园跳蚤市场交易系统的设计与实现
  5. [转载]看外国人在网络上的吐槽:为什么中文这么TM难?
  6. 适用于Apple Watch的Game Boy模拟器,RPG Maker进入Linux,以及更多游戏新闻
  7. 基于IPD的测试流程
  8. Ubuntu18.04离线安装Intel I219-V网卡驱动解决有线网络无法连接网卡不识别的问题
  9. 计算机C语言乘法除法优先级,运算符优先级
  10. 无需脱壳抓取软件加密包方法(逆向破解)