将具有相同ID的多条记录组合成一条记录。求解决方法。

minersi 2006-01-24 06:07:45
数据库中有类似下列的数据:
ID Value
1 数学
1 语文
2 化学
3 美术
3 音乐
4 物理
4 数学
5 体育
现在我想把它合并成以下的样子:
ID Value
1 数学,语文
2 化学
3 美术,音乐
4 物理,数学
5 体育
如果不在代码中手动组合,能直接在SqlServer中实现吗??怎么实现??
...全文
412 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw1a2 2006-01-25
  • 打赏
  • 举报
回复
http://blog.csdn.net/zjcxc/archive/2003/12/29/20075.aspx


今天第二次见了
ltt110 2006-01-25
  • 打赏
  • 举报
回复
我遇到了类似的问题:

begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+Valuefrom tTest where ID=@content
select @str as ret into tmp
end


由于数据量太大declare @str varchar(8000)容纳不下,但又不能declare @str text

希望能有有人帮忙解决。
minersi 2006-01-24
  • 打赏
  • 举报
回复
谢谢两位!
OracleRoob 2006-01-24
  • 打赏
  • 举报
回复

--创建测试环境
create table T1( id int , value varchar (50))
go

--追加测试数据
insert T1( id ,value ) values (1,'数学')
insert T1( id ,value ) values (1,'语文')
insert T1( id ,value ) values (2,'化学')
insert T1( id ,value ) values (3,'美术')
insert T1( id ,value ) values (3,'音乐')
insert T1( id ,value ) values (4,'物理')
insert T1( id ,value ) values (4,'数学')
insert T1( id ,value ) values (5,'体育')
go

--创建自定义函数
create function dbo.CX(@id int)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s = ''
select @s = @s + ',' + value from T1 where id = @id
set @s = stuff(@s,1,1,'')
return @s
end
go

select * from t1

--调用
select id, dbo.cx(id) as value
from t1
group by id
order by id



--删除临时表和自定义函数
drop table T1
drop function CX

/*
--测试结果
ID Value
-------------------------
1 数学,语文
2 化学
3 美术,音乐
4 物理,数学
5 体育
*/
-狙击手- 2006-01-24
  • 打赏
  • 举报
回复
create table t3 (ID int,Value varchar(10))
insert into t3 select 1,'数学'
insert into t3 select 1,'语文'
insert into t3 select 2,'化学'
insert into t3 select 3,'美术'
insert into t3 select 3,'音乐'
insert into t3 select 4,'物理'
insert into t3 select 4,'数学'
insert into t3 select 5,'体育'

go


create function getstr(@content varchar(100))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+Value from t3 where ID=@content
select @str=right(@str,len(@str)-1)
return @str
end
go


select id,dbo.getstr(id) as value from t3 group by id

drop function getstr
drop table t3


/*

id value
----------- -------------------
1 数学,语文
2 化学
3 美术,音乐
4 物理,数学
5 体育

*/
OracleRoob 2006-01-24
  • 打赏
  • 举报
回复

--创建测试环境
create table T1( id int , value varchar (50))
go

--追加测试数据
insert T1( id ,value ) values (1,'数学')
insert T1( id ,value ) values (1,'语文')
insert T1( id ,value ) values (2,'化学')
insert T1( id ,value ) values (3,'美术')
insert T1( id ,value ) values (3,'音乐')
insert T1( id ,value ) values (4,'物理')
insert T1( id ,value ) values (4,'数学')
insert T1( id ,value ) values (5,'体育')
go

--创建自定义函数
create function dbo.CX(@id int)
returns varchar(8000)
as
begin
declare @s varchar(8000)
set @s = ''
select @s = @s + ',' + value from T1 where id = @id
set @s = stuff(@s,1,1,'')
return @s
end
go

select * from t1

--调用
select id, dbo.cx(id) as value
from t1
group by id
order by id



--删除临时表和自定义函数
drop table T1
drop function CX

--测试结果

-------------------------

-狙击手- 2006-01-24
  • 打赏
  • 举报
回复
create function getstr(@content varchar(100))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+Valuefrom tTest where ID=@content
select @str=right(@str,len(@str)-1)
return @str
end
go


select id,dbo.getstr(id) as value from tTest group by id

/*
ID Value
1 数学,语文
2 化学
3 美术,音乐
4 物理,数学
5 体育
*/

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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