求助:这个SQL查询应该怎么实现?

samchoy 2004-11-18 09:39:04
假设表的结构是这样的:
班级 姓名
1 aaa
1 bbb
1 ccc
2 AAA
2 BBB
2 CCC

要求的查询结果为:
班级 人员
1 aaa, bbb, ccc
2 AAA, BBB, CCC

用SQL查询能够实现吗?
...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
King6860 2004-11-18
  • 打赏
  • 举报
回复
学习。。
colinliu 2004-11-18
  • 打赏
  • 举报
回复
create function fmerge(@b int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+姓名 from 表 where 班级=@b
set @str=right(@str,len(@str)-1)
return(@str)
End

select 班级,dbo.fmerge(姓名) as 人员
from 表
group by 班级
chenyuandxm 2004-11-18
  • 打赏
  • 举报
回复
dbo.fmerge
cowboytan 2004-11-18
  • 打赏
  • 举报
回复
怎么在执行select过程中,出现下面的提示呀
服务器: 消息 195,级别 15,状态 10,行 1
'fmerge' 不是可以识别的 函数名。

我己经建了fmerge函数呀
chenyuandxm 2004-11-18
  • 打赏
  • 举报
回复
不好意思,最后一句有点小问题:
select 班级,dbo.funlink(@id) as 人员 from table group by id
chenyuandxm 2004-11-18
  • 打赏
  • 举报
回复
用函数实现:
create function funlink(@id int)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s=''
select @s=@s+rtrim(name)+',' from table where id=@id
return @s
end

select 班级,funlink(@id) as 人员 from table group by id
lyzzbbgo 2004-11-18
  • 打赏
  • 举报
回复
PS:fmerge函数是邹建写的
davorsuker39 2004-11-18
  • 打赏
  • 举报
回复
看看这个例子吧!
create table ta (id int, value varchar(20))
Insert into ta
select '1','aaa'
union all select '2','bbb'
union all select '3','ccc'

create table tb (id int, value varchar(20))
Insert into tb
select '1','aaa,bbb,'
union all select '2','bbb,ccc,'
union all select '3','aaa,bbb,ccc,'

select * from ta
select * from tb

--函數
create function dbo.fn_m(@vchstring varchar(1000))
returns varchar(1000)
as
begin
declare @intstart int,@intlocation int
declare @s varchar(1000),@vchsubstring varchar(100)

select @intstart =1,@s=''
select @intlocation = charindex(',',@vchstring,@intstart)
while (@intlocation <>0 )
begin
select @vchsubstring=substring(@vchstring,@intstart,@intlocation-@intstart)
select @s=@s+cast([id] as varchar)+',' from ta where value=@vchsubstring
select @intstart = @intlocation +1
select @intlocation = charindex(',',@vchstring,@intstart)
end
return(@s)
end

--刪除
drop table ta
drop table tb
drop function dbo.fn_m

select id, value=dbo.fn_m(value) from tb
--結果
id value
------------------
1 1,2,
2 2,3,
3 1,2,3,
lyzzbbgo 2004-11-18
  • 打赏
  • 举报
回复
create function fmerge(@b int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+姓名 from 表 where 班级=@b
set @str=right(@str,len(@str)-1)
return(@str)
End

select 班级,fmerge(姓名) as 人员
from 表
group by 班级
samchoy 2004-11-18
  • 打赏
  • 举报
回复
谢谢了!

34,576

社区成员

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

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