Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2885782
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2012-03-31 10:47:19

同事的一个需求,表信息如下:

SQL> SELECT * FROM YANSP ORDER BY BRH_LVL,1;
 
BRH_ID BRH_NM         SUP_BRH_ID     BR
------ -------------- -------------- --
1      山东           0              1
2      上海           0              1
3      日照           1              2
4      临沂           1              2
10     闵行           2              3
11     北蔡           8              3
12     唐镇           8              3
5      莒县           3              3
6      东港           3              3
7      五莲           3              3
8      浦东新区       2              3
9      宝山           2              3
 
已选择12行。

显示结果类似如下形式:

省份    市     县      LEVEL
山东   NULL    NULL      1
山东   日照    NULL      2
山东   日照    莒县      3
山东   日照    东港      3
山东   日照    五莲      3
 
SQL实现如下
 
SQL> COL SUPNAME FORMAT A15
SQL> COL BRH_NAME FORMAT A15
SQL> COL CHILD_NAME FORMAT A15
SQL> SELECT SUPNAME,
  2         DECODE(LVL,1,NULL,2,TRIM(BRH_NM),3,
  3                TRIM(SUBSTR(BRH_NAME_PATH,INSTR(BRH_NAME_PATH,'/',1,2)+1,INST
R(BRH_NAME_PATH,'/',1,3)-INSTR(BRH_NAME_PATH,'/',1,2)-1))) BRH_NAME,
  4         DECODE(LVL,1,NULL,2,NULL,3,TRIM(BRH_NM)) CHILD_NAME,
  5         BRH_LVL
  6  FROM (
  7    SELECT CONNECT_BY_ROOT(BRH_NM) SUPNAME,
  8           SYS_CONNECT_BY_PATH(BRH_NM,'/') BRH_NAME_PATH,
  9           T.BRH_LVL,BRH_ID,LEVEL LVL,BRH_NM
 10    FROM YANSP T
 11    START WITH  SUP_BRH_ID=0
 12    CONNECT BY NOCYCLE PRIOR BRH_ID=SUP_BRH_ID
 13  ) ;
SUPNAME         BRH_NAME        CHILD_NAME      BR
--------------- --------------- --------------- --
山东                                            1
山东            日照                            2
山东            日照            莒县            3
山东            日照            东港            3
山东            日照            五莲            3
山东            临沂                            2
上海                                            1
上海            闵行                            3
上海            浦东新区                        3
上海            浦东新区        北蔡            3
上海            浦东新区        唐镇            3
上海            宝山                            3
 
已选择12行。
 
SQL>
阅读(1291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~