拼接表中某一列的所有值


完整例子:
select LTRIM(MAX(SYS_CONNECT_BY_PATH(ORG.ORGNAME, '-')), '-')  from EOSORG_T_ORGANIZATION  ORG start with ORG.ORGID = '103511' 
  connect by PRIOR ORG.PARENTORGID = ORG.ORGID;

其中MAX函数取序号最大的记录
select MAX(SYS_CONNECT_BY_PATH(ORG.ORGNAME, '-'))  from EOSORG_T_ORGANIZATION  ORG start with ORG.ORGID = '103511' 
  connect by PRIOR ORG.PARENTORGID = ORG.ORGID;

ltrim:是个字符串函数,去掉左边的'-'
select LTRIM(SYS_CONNECT_BY_PATH(ORG.ORGNAME,'-'),'-')  from EOSORG_T_ORGANIZATION  ORG start with ORG.ORGID = '103511' 
  connect by PRIOR ORG.PARENTORGID = ORG.ORGID;

不带上面两个函数的结果
select SYS_CONNECT_BY_PATH(ORG.ORGNAME,'-') from EOSORG_T_ORGANIZATION  ORG start with ORG.ORGID = '103511' 
  connect by PRIOR ORG.PARENTORGID = ORG.ORGID;

查询条件:必须是个递归查询
select * from EOSORG_T_ORGANIZATION  ORG start with ORG.ORGID = '103511' connect by PRIOR ORG.PARENTORGID = ORG.ORGID;


扩展:任意查询条件的例子:
SELECT COL1, LTRIM(MAX(SYS_CONNECT_BY_PATH(COL2, ',')), ',') COL2
  FROM (SELECT COL1,
               COL2,
               MIN(COL2) OVER(PARTITION BY COL1) COL2_MIN,
               (ROW_NUMBER() OVER(ORDER BY COL1, COL2)) +
               (DENSE_RANK() OVER(ORDER BY COL1)) NUMID
          FROM (select 1 COL1,displayname COL2 FROM tbl_aaaa_organization))
     START WITH COL2 = COL2_MIN
    CONNECT BY NUMID - 1 = PRIOR NUMID
     GROUP BY COL1;

其中
select 1 COL1,displayname COL2 FROM tbl_aaaa_organization
是任意的查询条件
FROM (SELECT COL1,
               COL2,
               MIN(COL2) OVER(PARTITION BY COL1) COL2_MIN,
               (ROW_NUMBER() OVER(ORDER BY COL1, COL2)) +
               (DENSE_RANK() OVER(ORDER BY COL1)) NUMID
          FROM (select 1 COL1,displayname COL2 FROM tbl_aaaa_organization))
就是为了创建一个递归表




你可能感兴趣的:(拼接表中某一列的所有值)