--建立测试环境
Create Table TEST
(ID Varchar(10),
Name Nvarchar(10))
Insert TEST Values('01', N'小张')
Insert TEST Values('01', N'小王')
Insert TEST Values('02', N'小王')
Insert TEST Values('02', N'小陈')
GO
--建立函数
Create Function GetName(@ID Int)
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Set @S=''
Select @S=@S+';'+Name from TEST Where ID=@ID Order By Name
Return (Stuff(@S,1,1,''))
End
GO
--测试
Select ID,dbo.GetName(ID) As Name from TEST Group By ID
--删除测试环境
Drop Table TEST
Drop Function GetName
GO
--结果
/*
ID Name
01 小张;小王
02 小王;小陈
*/
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s=''
select @s=@s+';'+name from y where id=@id
set @s=right(@s,len(@s)-1)
return(@s)
Endselect distinct id, dbo.pmerg(id) from y
select @id='',@name=''
update table1 set @name=case when id=@id then @name+';'+name else name end
,@id=id,name=@name
select id ,max(name) from table1 group by id
我有两个表,一个里面保存的类似“1,2,4,”这样的记录,里面的1、2、4分别对应另一个表的ID,我如何取出另一个表的其他字段?
比如:
表1:
刘若英 1,2
表2:
1 歌星
2 演员
3 影星
我要得到:
刘若英 歌星,演员
Create Function GetName(@ID Int)
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Set @S=''
Select @S=@S+';'+Name from TEST Where ID=@ID Order By Name
Return (Stuff(@S,1,1,''))
End
GO
to iuhxq:
我对你的问题写了一种解法, 你看看合不合要求
PS:建议不要在人家的帖子里杂一些其它问题, 那样帖子会很乱, 而且也不会有太多人注意你的问题*/
--测试数据
create table t1(name varchar(10), id varchar(10))
create table t2(id varchar(10), type varchar(10))
insert t1 select '刘若英', '1,2'
union all select '刘德华', '1,2,3'
insert t2 select '1', '歌星'
union all select '2', '演员'
union all select '3', '影星'
go
--主要部分
--创建UDF
Create Function dbo.GetType(@name varchar(10))
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Set @S=''
Select @S=@S+','+type from (select name, type
from t1 join t2
on charindex(t2.id, t1.id)<>0)t
Where Name=@Name
Return (Stuff(@S,1,1,''))
End
GO
--查询
select distinct name, type=dbo.GetType(name)
from t1 join t2
on charindex(t2.id, t1.id)<>0
--清除
drop table t1
drop table t2
drop Function dbo.GetType
to 楼主:我想游鱼的意思应该是下面的.(这个题目还可以不用用户自定义函数来做. 不过用户自定义函数是标准解法, 高效, 直观)。楼主需要的话,我可以写一下,低效, 不直观的解法。
*/
--测试数据
Create Table TEST
(ID Varchar(10),
Name Nvarchar(10))
Insert TEST Values('01', N'小张')
Insert TEST Values('01', N'小王')
Insert TEST Values('02', N'小王')
Insert TEST Values('02', N'小陈')
GO
--主要部分
--建立函数
Create Function GetName(@ID Int)
Returns Nvarchar(2000)
As
Begin
Declare @S Nvarchar(2000)
Set @S=''
Select @S=@S+';'+Name from TEST Where ID=@ID Order By Name
Return (Stuff(@S,1,1,''))
End
GO
create proc proc_test
as
Select ID,dbo.GetName(ID) As Name from TEST Group By ID
go
--测试
exec proc_test--清除
drop table test
drop function dbo.GetName
drop proc proc_test
谢谢,我是觉得自己的问题跟楼主的差不多,呵呵id是int型,你的答案跟我的目的还有点不同