当前位置: 首页 > news >正文

数据库合并数据sql

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 varchar(10)) returns varchar(1000)
as
begin
  declare @str varchar(1000)
  select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
  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

 

相关文章:

  • PHP简单实例
  • 进程和线程的区别
  • java内存模型优化建议
  • node.js学习笔记--day1
  • Java 简单算法--排序
  • mysql视图学习总结
  • Ionic2构建iOS应用上传总结
  • vim 命令的一些用法
  • JS闭包
  • 【服务器环境搭建-Centos】jdk的安装
  • Linux 性能基准测试
  • 那些年我们学Flask-SQLAlchemy,实现数据库操作,分页等功能
  • Java设计模式—建造者模式
  • 集群基础之LVS的基础概念
  • mqtt
  • 77. Combinations
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • ECMAScript入门(七)--Module语法
  • ES6简单总结(搭配简单的讲解和小案例)
  • Fundebug计费标准解释:事件数是如何定义的?
  • js
  • leetcode386. Lexicographical Numbers
  • python 装饰器(一)
  • spring + angular 实现导出excel
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 基于Android乐音识别(2)
  • 聊聊directory traversal attack
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端设计模式
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 少走弯路,给Java 1~5 年程序员的建议
  • 微信支付JSAPI,实测!终极方案
  • 学习笔记TF060:图像语音结合,看图说话
  • ​比特币大跌的 2 个原因
  • "无招胜有招"nbsp;史上最全的互…
  • #1014 : Trie树
  • #pragma once
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (2)STL算法之元素计数
  • (30)数组元素和与数字和的绝对差
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT)一个美国文科博士的YardLife
  • (层次遍历)104. 二叉树的最大深度
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (小白学Java)Java简介和基本配置
  • (转)c++ std::pair 与 std::make
  • (转)memcache、redis缓存
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .Net 8.0 新的变化
  • .NET DataGridView数据绑定说明
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net解析传过来的xml_DOM4J解析XML文件