表a
name lx sl ty bz
aaa 1a-12b-13c-22d 2 jf bm
aaa 1a-12b-34d 3 jff bmz
bbb 2a-4b-16d 7 jfff bmzz 表b
name lx jf js sx sl ty bz
aaa 1a-12b-13c-22d 1a 12b 1 5 jf bm
aaa 1a-12b-13c-22d 12b 13c 2 2 jf bm
aaa 1a-12b-13c-22d 13c 22d 3 2 jf bm
aaa 1a-12b-34d 12b 34d 2 3 jff bmz
bbb 2a-4b-16d 2a 4b 1 7 jfff bmzz
bbb 2a-4b-16d 4b 16d 2 7 jfff bmzz
如何把表a 的 lx 拆分成表b
如果 name,jf,js,sx 相同的话还要把 sl 合并,第一条记录的 sl 就是拆分完后合并的,只保留其中一个。请高手指点
name lx sl ty bz
aaa 1a-12b-13c-22d 2 jf bm
aaa 1a-12b-34d 3 jff bmz
bbb 2a-4b-16d 7 jfff bmzz 表b
name lx jf js sx sl ty bz
aaa 1a-12b-13c-22d 1a 12b 1 5 jf bm
aaa 1a-12b-13c-22d 12b 13c 2 2 jf bm
aaa 1a-12b-13c-22d 13c 22d 3 2 jf bm
aaa 1a-12b-34d 12b 34d 2 3 jff bmz
bbb 2a-4b-16d 2a 4b 1 7 jfff bmzz
bbb 2a-4b-16d 4b 16d 2 7 jfff bmzz
如何把表a 的 lx 拆分成表b
如果 name,jf,js,sx 相同的话还要把 sl 合并,第一条记录的 sl 就是拆分完后合并的,只保留其中一个。请高手指点
解决方案 »
- oracle问题
- 新手求教!!!
- oracle的官方网站上的ORACLE9I的安装文件,是自带中文的吗?
- 请高手帮忙看看这是不是死锁问题,又该怎么解决呢
- 请问oracle能否取得最后更新的行????????
- 一道笔试题求解
- 装了ORACLE10G就不能用PLSQL DEVELOP了吗?多好的工具啊~~~
- 查找某字段重复值的语句,当该字段为空字符串时,不起作用,怎么办?
- Oracle 8i快照刷新時間設定問題
- 大家讨论一下:EJB vs. DB store procedure
- 求助:数据库表结构设计与平均转发的问题
- ubuntu系统中运行java程序调用oracle 的sqlplus,有点挑战性
select 'aaa' name,'1a-12b-13c-22d' lx,2 sl,'jf' ty,'bm' bz from dual
union all
select 'aaa' name,'1a-12b-34d' lx,3 sl,'jff' ty,'bmz' bz from dual
union all
select 'bbb' name,'2a-4b-16d' lx,7 sl,'jfff' ty,'bmzz' bz from dual
)
, temp as(
select level lv from dual connect by level < 4
)
select name,min(lx) lx,jf,js,sx,sum(sl) sl,min(ty) ty,min(bz) bz from(
select name,lx,k1 jf,nvl(k2,substr(lx,lv1+1,length(lx))) js,lv sx,sl,ty,bz from(
select name,lx,lv0,lv1,lv2,k1,k2,lv,sl,ty,bz from(
select name,lx,lv0,lv1,lv2,substr(lx,lv0+1,lv1-lv0-1) k1,substr(lx,lv1+1,lv2-lv1-1) k2,lv,sl,ty,bz from(
select name,lx,decode(lv,1,0,instr(lx,'-',1,lv-1)) lv0,instr(lx,'-',1,lv) lv1,instr(lx,'-',1,lv+1) lv2,lv,sl,ty,bz from a,temp
) order by name,lx,lv
) where k1 is not null
)
)group by name,jf,js,sx order by name,lx,sx
select 'aaa' name,'1a-12b-13c-22d' lx,2 sl,'jf' ty,'bm' bz from dual
union all
select 'aaa' name,'1a-12b-34d' lx,3 sl,'jff' ty,'bmz' bz from dual
union all
select 'bbb' name,'2a-4b-16d' lx,7 sl,'jfff' ty,'bmzz' bz from dual
)
, temp as(
select level lv from dual connect by level < 4
)
select name,min(lx) lx,jf,js,sx,sum(sl) sl,min(ty) ty,min(bz) bz from(
select name,lx,k1 jf,nvl(k2,substr(lx,lv1+1,length(lx))) js,lv sx,sl,ty,bz from(
select name,lx,lv0,lv1,lv2,k1,k2,lv,sl,ty,bz from(
select name,lx,lv0,lv1,lv2,substr(lx,lv0+1,lv1-lv0-1) k1,substr(lx,lv1+1,lv2-lv1-1) k2,lv,sl,ty,bz from(
select name,lx,decode(lv,1,0,instr(lx,'-',1,lv-1)) lv0,instr(lx,'-',1,lv) lv1,instr(lx,'-',1,lv+1) lv2,lv,sl,ty,bz from a,temp
) order by name,lx,lv
) where k1 is not null
)
)group by name,jf,js,sx order by name,lx,sx
如果你的lx中有100个'-',你把level增大到101个,不就可以了吗