怎么用sql把一列数据拼成一个字符串?

flyingbirdl 2005-06-21 09:11:39
用在子查询中,如果有多条数据则把这些数据拼成一条来查询出来
例如 表1 学生信息( ID Name)
1 张三
表2 学生课程( PK StudentID Course)
1 1 高数
2 1 线代

然后通过一条查询得到
ID Name Course
1 张三 高数|线代
这样一个结果
...全文
787 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingbirdl 2005-06-21
  • 打赏
  • 举报
回复
多谢各位!!!!
paoluo 2005-06-21
  • 打赏
  • 举报
回复
--建立测试环境
Create Table 学生信息
(ID Int,
Name Nvarchar(10))

Create Table 学生课程
(PK Int,
StudentID Int,
Course Nvarchar(20))
--插入数据
Insert 学生信息 Values(1, N'张三')

Insert 学生课程 Values(1, 1, N'高数')
Insert 学生课程 Values(2, 1, N'线代')
GO
--建立函数
Create Function GetCourse(@ID Int)
Returns Nvarchar(1000)
As
Begin
Declare @S Nvarchar(1000)
Set @S=''
Select @S=@S+'|'+Course from 学生课程 Where StudentID=@ID Order By PK
Return(Stuff(@S,1,1,''))
End
GO
--测试
Select *,dbo.GetCourse(ID) As Course from 学生信息
--删除测试环境
Drop Table 学生信息,学生课程
Drop Function GetCourse
--结果
/*
ID Name Course
1 张三 高数|线代
*/
wangdehao 2005-06-21
  • 打赏
  • 举报
回复
速度这么快又这么正确,想弄点分都难了,^-^
xdhou 2005-06-21
  • 打赏
  • 举报
回复
楼上正解,楼主应该把此函数保存起来,CSDN里有过很多人问过这样的问题了.
子陌红尘 2005-06-21
  • 打赏
  • 举报
回复
--生成测试数据
create table 学生信息(ID int,Name varchar(10))
create table 学生课程(PK int,StudentID int,Course varchar(10))

insert into 学生信息 select 1,'张三'

insert into 学生课程 select 1,1,'高数'
insert into 学生课程 select 2,1,'线代'


--创建自定义函数
create function f_str(@ID int)
returns varchar(8000)
AS
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+'|'+rtrim(Course) from 学生课程 where StudentID = @ID
set @ret = case when len(@ret)>0 then stuff(@ret,1,1,'') else @ret end
return @ret
end


--调用自定义函数执行查询
select
a.ID,a.Name,Course=dbo.f_str(a.ID)
from
学生信息 a
group by
a.ID,a.Name


/*
--输出查询结果
ID Name Course
---- ------ ---------
1 张三 高数|线代
*/
子陌红尘 2005-06-21
  • 打赏
  • 举报
回复
create function f_str(@ID int)
returns varchar(8000)
AS
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+'|'+rtrim(Course) from 学生课程 where StudentID = @ID
set @ret = case when len(@ret)>0 then stuff(@ret,1,1,'') else @ret end
return @ret
end


select
a.ID,a.Name,Course=dbo.f_str(a.ID)
from
学生信息 a
group by
a.ID,a.Name

34,596

社区成员

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

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