[sql server] 合并字符串

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 本文转载:http://blog.csdn.net/leamonjxl/article/details/7042317 很实用的帖子,收藏学习。。。。。。。 /*标题:按某字段合并字符串之一(简单合并) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-11-06 地点:广东深圳 描述:将如下形式的数据按id字段合并value字段。

本文转载:http://blog.csdn.net/leamonjxl/article/details/7042317

 

很实用的帖子,收藏学习。。。。。。。
  /* 标题:按某字段合并字符串之一(简单合并)
 

作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
 时间:2008-11-06
 地点:广东深圳
 
描述:将如下形式的数据按id字段合并value字段。
 id    value
 ----- ------
 1     aa
 1     bb
 2     aaa
 2     bbb
 2     ccc
 需要得到结果:
 id     value
 ------ -----------
 1      aa,bb
 2      aaa,bbb,ccc
 即:group by id, 求 value 的和(字符串相加)
 
*/
  -- 1、sql2000中只能用自定义的函数解决
  create  table tb(id  int, value  varchar( 10))
  insert  into tb  values( 1' aa ')
  insert  into tb  values( 1' bb ')
  insert  into tb  values( 2' aaa ')
  insert  into tb  values( 2' bbb ')
  insert  into tb  values( 2' ccc ')
  go
 
create  function dbo.f_str( @id  int
returns  varchar( 100)
  as
  begin
      declare  @str  varchar( 1000)
      set  @str  =  ''
      select  @str  =  @str  +  ' , '  +  cast(value  as  varcharfrom tb  where id  =  @id
      set  @str  =  right( @str ,  len( @str-  1)
      return  @str
  end
  go
 
-- 调用函数
  select id , value  = dbo.f_str(id)  from tb  group  by id
 
drop  function dbo.f_str
  drop  table tb
 

-- 2、sql2005中的方法
  create  table tb(id  int, value  varchar( 10))
  insert  into tb  values( 1' aa ')
  insert  into tb  values( 1' bb ')
  insert  into tb  values( 2' aaa ')
  insert  into tb  values( 2' bbb ')
  insert  into tb  values( 2' ccc ')
  go
 
select id,  [ value ]  =  stuff(( select  ' , '  +  [ value ]  from tb t  where id  = tb.id  for xml path( '')) ,  1 ,  1 ,  '')
  from tb
  group  by id
 
drop  table tb
 

-- 3、使用游标合并数据
  create  table tb(id  int, value  varchar( 10))
  insert  into tb  values( 1' aa ')
  insert  into tb  values( 1' bb ')
  insert  into tb  values( 2' aaa ')
  insert  into tb  values( 2' bbb ')
  insert  into tb  values( 2' ccc ')
  go
  declare  @t  table(id  int,value  varchar( 100)) -- 定义结果集表变量
  -- 定义游标并进行合并处理
  declare my_cursor  cursor local  for
  select id , value  from tb
  declare  @id_old  int ,  @id  int ,  @value  varchar( 10) ,  @s  varchar( 100)
  open my_cursor
  fetch my_cursor  into  @id ,  @value
  select  @id_old  =  @id ,  @s = ''
  while  @@FETCH_STATUS  =  0
  begin
      if  @id  =  @id_old
         select  @s  =  @s  +  ' , '  +  cast( @value  as  varchar)
      else
        begin
          insert  @t  values( @id_old ,  stuff( @s, 1, 1, ''))
          select  @s  =  ' , '  +  cast( @value  as  varchar) ,  @id_old  =  @id
        end
      fetch my_cursor  into  @id ,  @value
  END
  insert  @t  values( @id_old ,  stuff( @s, 1, 1, ''))
  close my_cursor
  deallocate my_cursor
 
select  *  from  @t
  drop  table tb

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
SQL脚本字符串替换
【5月更文挑战第3天】
19 4
|
5天前
|
XML 数据格式
【sqlserver】带分隔符字符串和多行互相转化
【sqlserver】带分隔符字符串和多行互相转化
17 0
|
5天前
|
SQL JSON 关系型数据库
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
【SQL编程】MySQL 5.7.28 版本使用 SQL 直接解析 JSON 字符串(判断是否是合法JSON类型+文本深度+文本长度+值类型+keys获取+值获取+不同深度数据获取)
64 0
|
5天前
|
SQL JSON Apache
Apache Flink SQL目前还不支持直接解析JSON字符串并将其转换为预期的数据类型
Apache Flink SQL目前还不支持直接解析JSON字符串并将其转换为预期的数据类型
166 1
|
5天前
|
SQL XML Java
记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故
记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故
80 0
|
9月前
|
SQL
sql server的拆分和合并
sql server的拆分和合并
51 0
|
9月前
|
SQL
sql server从某个字符开始截取后面的字符串
sql server从某个字符开始截取后面的字符串
132 0
|
11月前
sqlserver 截取字符串中的汉字
sqlserver 截取字符串中的汉字
122 0
|
11月前
|
SQL 存储 数据库连接
【批量添加】-拼接sql字符串
【批量添加】-拼接sql字符串
102 0
|
SQL
01 反引号“`”的使用-ES6模板字符串&SQL区分关键字
1 在SQL中反引号的作用-区分关键字 当属性名与SQL关键字冲突时使用反引号将属性名扩起来,用于区分关键字
96 0