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   体育 
*/ 

http://topic.csdn.net/t/20060124/18/4533802.html

在查询分析器执行,会得到记录,但是,当组合的value很长时,显示出来的value只是一部分,直接在分析器里保存为csv文件的时候,只保存了部分的value值,开始想着解决变量8000的限制问题,没解决好。后来将查询的结果导入到另一个表就ok了。value的值保存的就是正常的,不解。mark下

posted @ 2011-06-08 17:52  Frida-  阅读(375)  评论(0编辑  收藏  举报