当前位置: 代码迷 >> Sql Server >> ,数据怎么拆分
  详细解决方案

,数据怎么拆分

热度:31   发布时间:2016-04-24 19:40:09.0
求助,数据如何拆分?
现有一张表a如下:
id   name                                           地址
1    滨州医学院附属医院无棣医院肿瘤科               
2    长江医院集团西安华仁医院                       
3    郴州市第一人民医院(湘南学院附属一医院)
4    大庆市人民医院(哈尔滨医科大学第五附属医院)功能科
第一次,怎样把name列拆分后实现如下效果:
id   name                                      地址
1    滨州医学院附属医院无棣医院                
2    长江医院集团西安华仁医院
3    郴州市第一人民医院(湘南学院附属一医院)
4    大庆市人民医院(哈尔滨医科大学第五附属医院)
拆分后放入b表
第二次,将b表中name列需拆分为如下效果:
id   name                                      地址
1    滨州医学院附属医院
1    无棣医院                
2    长江医院
2    集团西安华仁医院
3    郴州市第一人民医院
3    湘南学院附属一医院
4    大庆市人民医院
4    哈尔滨医科大学第五附属医院
拆分后放入c表
注:表中还有其它很多列,第二次拆分后需要id相同的,其它的列也相同
求助该如何实现以上问题,请帮帮忙,谢谢。

------解决方案--------------------

create table 表a
(id int,name varchar(50),地址 varchar(10))

insert into 表a
 select 1,'滨州医学院附属医院无棣医院肿瘤科','' union all
 select 2,'长江医院集团西安华仁医院','' union all
 select 3,'郴州市第一人民医院(湘南学院附属一医院)','' union all
 select 4,'大庆市人民医院(哈尔滨医科大学第五附属医院)功能科',''

select id,name,地址 from 表a
/*
id          name                                               地址
----------- -------------------------------------------------- ----------
1           滨州医学院附属医院无棣医院肿瘤科                                   
2           长江医院集团西安华仁医院                                       
3           郴州市第一人民医院(湘南学院附属一医院)                               
4           大庆市人民医院(哈尔滨医科大学第五附属医院)功能科                          

(4 row(s) affected)
*/


-- 拆分后放入b表
select id,reverse(substring(reverse(name),
                            case when charindex(')院医',reverse(name),1)>0 
                                 then charindex(')院医',reverse(name),1) 
                                 when charindex('院医',reverse(name),1)>0 
                                 then charindex('院医',reverse(name),1) else 1 end,
  相关解决方案