有点难度的问题

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
...全文
85 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jmjack19 2004-12-25
  • 打赏
  • 举报
回复
谢谢.
zjcxc 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 行)
--*/
zjcxc 2004-12-25
  • 打赏
  • 举报
回复
--要写个自定义函数实现

--处理的自定义函数
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

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧