这个拆分表sql语句如何写
这个拆分表sql语句怎么写
--原始数据
--table1是现在的班级信息表,两个二年级数学班,一个四年级英语班
--table2是升一个年级后的班级信息表,二年级升成三年级
--table1二年级有两个班,升级到三年级后,两个班合成一个班
--table1中的四年级英语班,没有升级的班
if object_id('table1') is not null
drop table table1
go
create table table1
(
id int identity(1,1),
grade varchar(16),
course varchar(16),
teacher varchar(16)
)
go
insert into table1
select '二年级','数学','张三' union all
select '二年级','数学','张三' union all
select '四年级','英语','王五'
go
if object_id('table2') is not null
drop table table2
go
create table table2
(
id int identity(1,1),
grade varchar(16),
course varchar(16),
teacher varchar(16),
sid varchar(10) --原班级编号
)
go
insert into table2
select '三年级','数学','李四','1,2'
go
想要的结果

现在是这样写的
先拆分,再用左连接
with qry1 as
(
select * from
(
select *,col=convert(xml,'<root><v>'+replace(sid,',','</v><v>')+'</v></root>') from table2
) t1
cross apply (select col3=t3.col2.value('.','varchar(16)') from t1.col.nodes('/root/v') t3(col2)) t2
)
select a.*,b.grade,b.course,b.teacher,b.sid from table1 a left join qry1 b on a.id=b.col3
不知道有没有更简单的方法
------解决思路----------------------
------解决思路----------------------
--原始数据
--table1是现在的班级信息表,两个二年级数学班,一个四年级英语班
--table2是升一个年级后的班级信息表,二年级升成三年级
--table1二年级有两个班,升级到三年级后,两个班合成一个班
--table1中的四年级英语班,没有升级的班
if object_id('table1') is not null
drop table table1
go
create table table1
(
id int identity(1,1),
grade varchar(16),
course varchar(16),
teacher varchar(16)
)
go
insert into table1
select '二年级','数学','张三' union all
select '二年级','数学','张三' union all
select '四年级','英语','王五'
go
if object_id('table2') is not null
drop table table2
go
create table table2
(
id int identity(1,1),
grade varchar(16),
course varchar(16),
teacher varchar(16),
sid varchar(10) --原班级编号
)
go
insert into table2
select '三年级','数学','李四','1,2'
go
想要的结果
现在是这样写的
先拆分,再用左连接
with qry1 as
(
select * from
(
select *,col=convert(xml,'<root><v>'+replace(sid,',','</v><v>')+'</v></root>') from table2
) t1
cross apply (select col3=t3.col2.value('.','varchar(16)') from t1.col.nodes('/root/v') t3(col2)) t2
)
select a.*,b.grade,b.course,b.teacher,b.sid from table1 a left join qry1 b on a.id=b.col3
不知道有没有更简单的方法
------解决思路----------------------
SELECT a.*,b.grade,b.course,b.teacher,b.sid
FROM table1 a
LEFT JOIN table2 b ON ','+b.sid+','LIKE'%,'+CAST(a.id AS VARCHAR(10))+',%'
------解决思路----------------------
select * from table1 left join table2
on ','+table2.[sid]+',' like '%,'+cast(table1.id as VARCHAR(10))+',%'