CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

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

楼主minersi(懒虫族之慵懒的猫猫)2006-01-24 18:07:45 在 MS-SQL Server / 疑难问题 提问

数据库中有类似下列的数据:  
  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不同)??

关键词

  • 数学
  • 物理
  • 音乐
  • 数据
  • 语文2化学3美术
  • insertt1
  • ttest
  • 音乐4物理
  • varchar
  • str

得分解答快速导航

  • 帖主:minersi
  • happyflystone
  • wangtiecheng
  • ltt110
  • lw1a2

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo