连接字符串的SQL方法

我的博客的第一篇文章就是介绍如何将字符串连接在一起的,这里介绍一下通过SQL的方法来解决同样的问题。

对字符串的“sum”——在Oracle中自定义聚集函数的例子:http://yangtingkun.itpub.net/post/468/3380


对于下面这个利用自定义聚集函数的例子,将其改写为直接用SQL实现:

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID
-------------------------------------------------- ------- ----------
SY_NAME SYNONYM
T TABLE
TEST TABLE
TEST1 TABLE
T_BLOB TABLE
T_CLOB TABLE
V_T VIEW
V_TEST VIEW

已选择8行。

SQL> SELECT TABTYPE, F_LINK(TNAME) TNAME FROM TAB GROUP BY TABTYPE;

TABTYPE TNAME
------- --------------------------------------------------
SYNONYM SY_NAME
TABLE T,TEST1,T_CLOB,T_BLOB,TEST
VIEW V_T,V_TEST

除了利用自定义聚集函数外,SQL函数中能将多个字符串合并在一起的只有SYS_CONNECT_BY_PATH了。

而这个函数只能应用在树型查询中,为了能使用这个函数,必须人为的构造出树来。也就是说,必须可以构造出一个CONNECT BY列使得相同的TABTYPETNAME可以用SYS_CONNECT_BY_PATH连接起来。

连接列可以使用ROW_NUMBER() OVER()来构造,在CONNECT BY的时候指定当前列的等于父列的值加1。并在START WITH时指定起始值为1

最后对TABTYPE进行分组,取得最大值就是最终需要的结果:

SQL> SELECT TABTYPE, MAX(LTRIM(SYS_CONNECT_BY_PATH(TNAME, ','), ',')) TNAME
2 FROM
3 (
4 SELECT TABTYPE, TNAME, ROW_NUMBER() OVER(PARTITION BY TABTYPE ORDER BY TNAME) RN
5 FROM TAB
6 )
7 START WITH RN = 1
8 CONNECT BY PRIOR RN + 1 = RN
9 AND PRIOR TABTYPE = TABTYPE
10 GROUP BY TABTYPE;

TABTYPE TNAME
------- --------------------------------------------------
SYNONYM SY_NAME
TABLE T,TEST,TEST1,T_BLOB,T_CLOB
VIEW V_T,V_TEST

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

转载于:http://blog.itpub.net/4227/viewspace-69399/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值