有点难度的问题

jmjack19 2004-12-25 10:35:56
想做一个视图: 视图包括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
...全文
25 点赞 收藏 3
写回复
3 条回复
jmjack19 2004年12月25日
谢谢.
回复 点赞
--测试

--测试数据
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

(所影响的行数为 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
回复 点赞
发动态
发帖子
应用实例
创建于2007-09-28

1.1w+

社区成员

6.8w+

社区内容

MS-SQL Server 应用实例
社区公告
暂无公告