首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

求一条sql,请大家帮忙,多谢

2012-05-27 
求一条sql,请大家帮忙,谢谢A表:员工科室登记日期张三胸外科,皮肤科2000-11-19李四胸外科2001-01-04王五妇

求一条sql,请大家帮忙,谢谢
A表:
员工 科室 登记日期
张三 胸外科,皮肤科 2000-11-19
李四 胸外科 2001-01-04
王五 妇产科,骨科 2001-01-08
求一条sql,让其结果如下显示
A表:
员工 科室 登记日期
张三 胸外科 2000-11-19
张三 皮肤科 2000-11-19
李四 胸外科 2001-01-04
王五 妇产科 2001-01-08
王五 骨科 2001-01-08

即A表员工属于多个科室的是在一行上用逗号分隔的,现在要把这种形式换成用增加行的形式来解决,属于多个科室就有多行记录


[解决办法]

SQL code
with t1 as(select '张三' c1,'胸外科,皮肤科' c2,date'2000-11-19' c3  from dual union allselect '李四','胸外科',date'2001-01-04'  from dual union allselect '王五','妇产科,骨科',date'2001-01-08' from dual)select c1,  substr(','||c2||',',instr(','||c2,',',1,b.rn)+1,  instr(c2||',',',',1,b.rn)-instr(','||c2,',',1,b.rn)) c2,c3from t1,  (select rownum rn from t1  connect by rownum<10) b  where length(c2)-length(replace(c2,','))+1>=b.rnorder by c1,b.rn         c1     c2    c3-----------------------------------------------1    李四    胸外科    2001/1/42    王五    妇产科    2001/1/83    王五    骨科    2001/1/84    张三    胸外科    2000/11/195    张三    皮肤科    2000/11/19
[解决办法]
借上面的数据用一下

SQL code
with t1 as(select '张三' c1,'胸外科,皮肤科,骨科1,骨科2,骨科3,骨科4,骨科5,骨科6,骨科7,骨科8,骨科9,骨科10,骨科11,骨科12,骨科13,骨科14,骨科15,骨科16,骨科17' c2,date'2000-11-19' c3  from dual union allselect '李四','胸外科',date'2001-01-04'  from dual union allselect '王五','妇产科,骨科',date'2001-01-08' from dual)select DISTINCT c1       ,c3       ,REPLACE( -- 去除多余的【,】            regexp_substr(c2||',' ,'.*?'||'[,]' ,1 ,LEVEL)  -- 截取 ,【科室】,            ,',') "科室"from t1        connect by level <= nvl(                               length(regexp_replace(c2,'[^,]','')) + 1                              ,1)order by c1; 

热点排行