sql 将具有相同ID的多条记录组合成一条记录
--创建测试环境
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 体育
*/
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 体育
*/
http://topic.csdn.net/t/20060124/18/4533802.html
在查询分析器执行,会得到记录,但是,当组合的value很长时,显示出来的value只是一部分,直接在分析器里保存为csv文件的时候,只保存了部分的value值,开始想着解决变量8000的限制问题,没解决好。后来将查询的结果导入到另一个表就ok了。value的值保存的就是正常的,不解。mark下