[急]SQL怎么把2行一样的列合并到一行,用“;”隔开?

f4t 2005-07-11 08:59:57
表1

id name
01 小张
01 小王
02 小王
02 小陈

请问怎样变成
id name
01 小张;小王
02 小王;小陈

谢谢!另外我就10分了
...全文
510 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlover8 2005-12-21
  • 打赏
  • 举报
回复
mark
f4t 2005-07-11
  • 打赏
  • 举报
回复
to paoluo(一天到晚游泳的鱼):

我是初学者,不太懂。请问如果不在存储过程里创建函数,应该在什么地方创建呢?

谢谢!
paoluo 2005-07-11
  • 打赏
  • 举报
回复
函数就可以,为什么要用存储过程呢??

如果是要用存储过程,你可以在存储过程直接调用这个函数,不用Drop掉的。
jackluo1981 2005-07-11
  • 打赏
  • 举报
回复
要是你把函数写在存储过程中,是要释放掉的.
f4t 2005-07-11
  • 打赏
  • 举报
回复
to paoluo(一天到晚游泳的鱼) :

我是初学者,请问如果写个存储过程来完成以上工作,是要在该存储过程里动态创建一个函数,最后在drop掉这个函数吗?

谢谢!
summerICEREDTEA 2005-07-11
  • 打赏
  • 举报
回复
楼上的

将截断字符串或二进制数据。
语句已终止。

(所影响的行数为 2 行)

xiaomeixiang 2005-07-11
  • 打赏
  • 举报
回复
declare @id varchar(50),@name varchar(1000)
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
Yisa 2005-07-11
  • 打赏
  • 举报
回复
create function pmerg(@id int)
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)
End

select distinct id, dbo.pmerg(id) from y
geniusqing 2005-07-11
  • 打赏
  • 举报
回复
up
paoluo 2005-07-11
  • 打赏
  • 举报
回复

--建立测试环境
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 小王;小陈
*/
denniswwh 2005-07-11
  • 打赏
  • 举报
回复
一个语句恐怕是不能实现,可以用游标循环
vivianfdlpw 2005-07-11
  • 打赏
  • 举报
回复
这个函数的使用率蛮高的嘛 娃哈哈
iuhxq 2005-07-11
  • 打赏
  • 举报
回复
to filebat(Mark):
谢谢,我是觉得自己的问题跟楼主的差不多,呵呵

id是int型,你的答案跟我的目的还有点不同

filebat 2005-07-11
  • 打赏
  • 举报
回复
/*
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
filebat 2005-07-11
  • 打赏
  • 举报
回复
/*
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
phantomMan 2005-07-11
  • 打赏
  • 举报
回复
函数跟存储过程一样,不需要删除,除非它没有用处了
f4t 2005-07-11
  • 打赏
  • 举报
回复
to paoluo(一天到晚游泳的鱼):

谢谢!请问什么时候需要从数据库里边删除这个函数呢?
paoluo 2005-07-11
  • 打赏
  • 举报
回复
将这段代码复制到查询分析器中,将数据库改为你要建函数的数据库,然后点运行就可以建立函数了。

--建立函数
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
iuhxq 2005-07-11
  • 打赏
  • 举报
回复
请教paoluo(一天到晚游泳的鱼):
我有两个表,一个里面保存的类似“1,2,4,”这样的记录,里面的1、2、4分别对应另一个表的ID,我如何取出另一个表的其他字段?
比如:
表1:
刘若英 1,2
表2:
1 歌星
2 演员
3 影星
我要得到:
刘若英 歌星,演员

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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