想做一个视图: 视图包括A表和B表...A表的t_id和B表的id是like的关系....如何把B表的name跟A表做成一个视图?
A 表
id t_id
1 1,2,5
2 1,2
B 表
id name
1 名字1
2 名字2
5 名字3
视图
id name
1 名字1,名字2,名字3
2 名字1,名字2
...全文
843打赏收藏
有点难度的问题
想做一个视图: 视图包括A表和B表...A表的t_id和B表的id是like的关系....如何把B表的name跟A表做成一个视图? A 表 id t_id 1 1,2,5 2 1,2 B 表 id name 1 名字1 2 名字2 5 名字3 视图 id name 1 名字1,名字2,名字3 2 名字1,名字2
--测试数据
create table A(id int,t_id varchar(10))
insert A select 1,'1,2,5'
union all select 2,'1,2'
create table B(id int,name varchar(10))
insert B select 1,'名字1'
union all select 2,'名字2'
union all select 5,'名字3'
go
--处理的自定义函数
create function f_str(
@t_id varchar(100)
)returns varchar(8000)
begin
declare @r varchar(8000)
set @r=','+@t_id+','
select @r=replace(@r,','+rtrim(id)+',',','+rtrim(name)+',')
from B
where charindex(','+rtrim(id)+',',@r)>0
return(substring(@r,2,len(@r)-2))
end
go
--实现视图
create view 视图名
as
select id,name=dbo.f_str(t_id) from A
go
--查询
select * from 视图名
go
--删除测试
drop table A,B
drop view 视图名
drop function f_str
/*--结果
id name
----------- ---------------------
1 名字1,名字2,名字3
2 名字1,名字2
--处理的自定义函数
create function f_str(
@t_id varchar(100)
)returns varchar(8000)
begin
declare @r varchar(8000)
set @r=','+@t_id+','
select @r=replace(@r,','+rtrim(id)+',',','+rtrim(name)+',')
from B
where charindex(','+rtrim(id)+',',@r)>0
return(substring(@r,2,len(@r)-2))
end
go
--实现视图
create view 视图名
as
select id,name=dbo.f_str(t_id) from A