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

,数据怎么拆分

2013-12-06 
求助,数据如何拆分?现有一张表a如下:idname地址1滨州医学院附属医院无棣医院肿瘤科2长江医院集团西安华仁

求助,数据如何拆分?
现有一张表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,


                            50)) 'name',地址
into b表
from 表a

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

(4 row(s) affected)
*/


-- 拆分后放入c表
select a.id,
       cast(substring(a.name,b.number,charindex('医院',a.name+'医院',b.number)+1) as varchar(50)) 'name',
       地址
 into c表
 from (select id,replace(replace(name,'(',''),')','') 'name',地址 from b表) a
 inner join master.dbo.spt_values b
 on b.type='P' and b.number between 1 and len(a.name)
 and substring('医院'+a.name,b.number,2)='医院'

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

(8 row(s) affected)
*/

热点排行