ORACLE的字段拼接小记
标签:
技术杂谈 |
分类: 数据库 |
1 连接符号“||”的使用,能将多个表中不同的字段进行拼接。
1)单表的两个字段拼接
select
结果:55471#BX1200025
2)多表联合查询,表间字段的拼接,bmmc为gg_bmxx中的字段,jkdh为bx_bxdj表的字段
select
2 树形结构结果查询方法
解题:对表数据进行分析,进行编号和分组编号,如下图中的rn,rn1
http://s15/mw690/99201d89td4a65edb808e&690
http://s3/mw690/99201d89td4a65f5e7782&690
进一步帅选
select t.*,
--------------------------------------------------------------------
A=select a,b,row_number() over(order by a, b desc) rn from lucheng 最初的排序rn=1-12
---------------------------------------------------------------------
select a,
---------------------------------------------------------------------
结果
a
002
001
003
3 航程问题
a
----------------------
999
999
999
999
求得999的航线是x-y-z-m-l.
select t1.b || '-' || t2.b
from (select a, b from A where d = 1) t1,
where t1.a = t2.a
简化格式:select
replace('x','y','z')函数表示将x字符串中的y符号同z符号代替
如若不使用替换函数
select a, wm_concat(c) b
结果
sql1的值为
a
999
--------------------
sql2的值为
a
999 y-z-m-l
4 WMSYS.WM_CONCAT
参考原文 http://blog.sina.com.cn/s/blog_5c4736800100l2qw.html
SQL> select * from idtable;--所有数据
ID NAME
---------- -------------------------------------
10 ab
10 bc
10 cd
20 hi
20 ij
20 mn
6 rows selected
SQL> select id,wmsys.wm_concat(name) name from idtable group by id;
ID NAME
---------- --------------------------------------------
10 ab,bc,cd
20 hi,ij,mn
SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable;
ID NAME
---------- ---------------------------------------------------------
10 ab,bc,cd
10 ab,bc,cd
10 ab,bc,cd
20 ab,bc,cd,hi,ij,mn
20 ab,bc,cd,hi,ij,mn
20 ab,bc,cd,hi,ij,mn
6 rows selected
SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;
ID NAME
---------- ---------------------------------------------------------
10 ab
10 ab,bc
10 ab,bc,cd
20 ab,bc,cd,hi
20 ab,bc,cd,hi,ij
20 ab,bc,cd,hi,ij,mn
6 rows selected
个人觉得这个用法比较有趣.
SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable;
ID NAME
---------- ---------------------------------------------------
10 ab,bc,cd
10 ab,bc,cd
10 ab,bc,cd
20 hi,ij,mn
20 hi,ij,mn
20 hi,ij,mn
6 rows selected ----------------------------------------------------------
select id,
fid,
bmmc,
jgbh,
SYS_CONNECT_BY_PATH(to_char(sxh, '00'), '.') sort
from gg_bmxx
where --gg_bmxx.jgbh = '001'
gg_bmxx.fid = '4028826b38a2e4fc0138a337 e68e001c'
start with fid is null
connect by prior gg_bmxx.id = gg_bmxx.fid
order by sort, sxh
-----------------------------------------------------------
select id,
如若某个表中存有字段类似(x,y,z),现将(x,y,z)查询出来对应的内容(m,l,n).
select WMSYS.WM_CONCAT(g.dmmc) as lbstr
(select t.gslb from jc_czy t where
t.id=?),g.id)>0
------------------x,y,z->m,l,n-----------适用于单个记录查询
SELECT WMSYS.WM_CONCAT(DLJGJG.DLJGMC) zjmc
----相同的标识下的信息拼接如:某班级的若干学生名称:张三,李四,王五(适用单个记录查询)---

加载中…