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