将具有相同ID的多条记录组合成一条记录。求解决方法。
数据库中有类似下列的数据:
ID Value
1 数学
1 语文
2 化学
3 美术
3 音乐
4 物理
4 数学
5 体育
现在我想把它合并成以下的样子:
ID Value
1 数学,语文
2 化学
3 美术,音乐
4 物理,数学
5 体育
如果不在代码中手动组合,能直接在SqlServer中实现吗??怎么实现??
问题点数:100、回复次数:7Top
1 楼happyflystone(无枪的狙击手)回复于 2006-01-24 18:11:04 得分 40
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 体育
*/Top
2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-01-24 18:15:22 得分 40
--创建测试环境
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
--测试结果
-------------------------
Top
3 楼happyflystone(无枪的狙击手)回复于 2006-01-24 18:15:49 得分 0
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 体育
*/Top
4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-01-24 18:17:11 得分 0
--创建测试环境
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 体育
*/
Top
5 楼minersi(懒虫族之慵懒的猫猫)回复于 2006-01-24 19:02:48 得分 0
谢谢两位!Top
6 楼ltt110()回复于 2006-01-25 11:52:12 得分 5
我遇到了类似的问题:
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
希望能有有人帮忙解决。
Top
7 楼lw1a2(一刀 现在改六点下班了:()回复于 2006-01-25 11:53:38 得分 15
http://blog.csdn.net/zjcxc/archive/2003/12/29/20075.aspx
今天第二次见了Top
相关问题
- 请问有什么更快的方法从上万条记录中找出主键值相同的记录来????
- 用什么方法取得刚刚删除的记录的id?
- 有没有方法能删除两张表中某个字段相同的所有记录!
- 有什么好方法比较两个表,完全不相同的记录并查询出来呢?
- 每次从库中取一条记录,要求最近的20条不能有相同记录,谁有些简单方法.
- 判断某些记录是否存在,用以下哪种方法好些呀?[比如判断是否存在相同月份的一批记录]
- 如何用table a中的整行记录去更新table b中具有相同id的记录(a与b的表结构完全相同)?
- 根据字段faixu(数字)倒序,怎么得到某一记录的上一个记录和下一个记录 ID(自动编号),faixu有相同的值
- 使用sqlInsertCommand.ExecuteNonQuery()方法后怎样得知所插入记录的ID号?
- 为什么我在添加记录的时候,总是莫名其妙的添加两条相同的记录呢(只有id不同)??




