CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

列值如何进行合并?

楼主panys()2005-06-01 22:39:32 在 MS-SQL Server / 应用实例 提问

select   *   into   #t1  
  from   (  
  select   1   f1,   'a'   f2  
  union  
  select   1   f1,   'b'   f2  
  union  
  select   2   f1,   'c'   f2  
  union  
  select   3   f1,   'd'   f2)   a  
   
  select   *   from   #t1  
     
  /*  
   
  我想得到,相同f1的f2进行合并,结果如下,如何写这样的SQL?谢谢  
  结果应该如下:  
  f1                         f2  
  ------------------  
  1                           a,b  
  2                           c  
  3                           d  
   
  */ 问题点数:0、回复次数:6Top

1 楼WangZWang(先来)回复于 2005-06-01 22:58:17 得分 0

 
  --创建一个合并处理函数  
  create   function   f_str(  
  @f1   varchar(4)    
  )returns   varchar(8000)  
  as  
  begin  
  declare   @re   varchar(8000)  
  set   @re=''    
  select   @re=@re+','+cast(f2   as   varchar)  
  from   t1    
  where   f1=@f1    
  return(stuff(@re,1,1,''))  
  end  
  go  
  --调用函数实现查询      
   
  select   distinct   f1,f2=dbo.f_str(f1)    
  from   t1    
  goTop

2 楼filebat(Mark)回复于 2005-06-01 23:12:15 得分 0

参见:  
  http://community.csdn.net/Expert/topic/4052/4052457.xml?temp=5.399722E-02Top

3 楼zhangzs8896(小二)回复于 2005-06-02 09:27:47 得分 0

select   *   into   #t1  
  from   (  
  select   1   f1,   'a'   f2  
  union  
  select   1   f1,   'b'   f2  
  union  
  select   2   f1,   'c'   f2  
  union  
  select   3   f1,   'd'   f2)   a  
   
  /*查询  
  先创建一个表#t2,注意f2字段设置大些。将#t1数据插入到#t2  
  对#t2中的数据进行更新,  
  */  
  create   table   #t2(f1   int,f2   varchar(8000))  
  insert   #t2  
  select   *   from   #t1  
   
  declare   @s   varchar(100)  
  declare   @i   varchar(10)  
  set   @s=''  
  set   @i=0  
  update   #t2  
  set   @s=case   when   @i=f1   then   @s+','+f2   else   f2   end,  
          @i=f1,f1=@i,f2=@s  
  select   f1,f2=max(f2)   from   #t2  
  group   by   f1  
   
  --删除表  
  drop   table   #t1,#t2Top

4 楼zhangzs8896(小二)回复于 2005-06-02 09:29:19 得分 0

--结果    
  f1                         f2  
  ------------------  
  1                           a,b  
  2                           c  
  3                           d  
   
  --最近问这种问题的特别多,楼主可以搜索下,挺多的Top

5 楼zjcxc(邹建)回复于 2005-06-02 09:30:36 得分 0

select   *   into   #t1  
  from   (  
  select   1   f1,   'a'   f2  
  union  
  select   1   f1,   'b'   f2  
  union  
  select   2   f1,   'c'   f2  
  union  
  select   3   f1,   'd'   f2)   a  
   
  select   f1,f2=min(f2)+case   when   count(*)=1   then   ''   else   ','+max(f2)   end  
  from   #t1  
  group   by   f1  
   
  drop   table   #t1  
   
  /*--结果  
  f1                     f2        
  -----------   ----    
  1                       a,b  
  2                       c  
  3                       d  
   
  (所影响的行数为   3   行)  
  --*/  
  Top

6 楼zhangzs8896(小二)回复于 2005-06-02 09:45:01 得分 0

恩?老大这么一写,到提醒了我。  
  楼主的意思是结果的f2列,是要这样的"最小值,最大值"的形式?  
  还是"值1,值2,值3..."这样的形式?    
   
  楼主可以加个  
  union    
  select   1   f1,   'M'   f2  
   
  再试试  
  Top

相关问题

  • 如何合并字段值
  • dataset如何列合并 ?
  • winform中,如何合并列。
  • 如何将列合并?
  • 如何合并数据是字段值?
  • 如何在列上合并两个表?
  • 如何合并DW中相同的列?
  • 如何合并datagrid中的某一列
  • 如何在表格中合并列?
  • 如何合并?

关键词

  • unionselect
  • 合并
  • varchar
  • 楼主
  • 结果
  • re
  • table
  • select
  • set

得分解答快速导航

  • 帖主:panys

相关链接

  • SQL Server类图书

广告也精彩

反馈

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