(Sql Server)数据的拆分和合并

背景:

今天遇到了数据合并和拆分的问题,尝试了几种写法。但大致可分为两类:一、原始写法。二、Sql Server 2005之后支持的写法。第一种写法复杂而且效率低下,不推荐。所以下面具体讲一下第二种写法。

数据的拆分:

再讲拆分前,首先先介绍两个函数:cross applyouter apply。这两个函数作用是交叉连接。这两个函数是在sql server 2005之后才有的,在2000与之相似的功能是cross join。虽然相似,但是cross join有一个致命功能缺陷。详看代码:

SELECT * FROM TEST01 AS T01 CROSS JOIN  FUNC_TB2(T01.FIELD1)
--FUNC_TB2为表值函数

执行此sql后,将报错。详细错误信息,如下:Msg 4104, Level 16, State 1, Line 1.The multi-part identifier "T01.FIELD1" could not be bound。由此可见,cross join不能接受由TEST01传过去的值。由于cross join这样的缺陷,所以sql server 在2005版本后新增了cross applyouter apply,二者可以完全弥补这一缺陷。cross apply虽然与outer apply功能相似,但是二者也有不同。cross apply与FUNC_TB2交集的结果将去除右边NULL项,而outer apply将包括NULL项。
     上面,我们具体讲了两个函数的具体用法,下面讲一下根据以上函数如何进行拆分。现有这样一个Case:有一张表aaa,如图所示

,现需要将name字段中的数据拆分出来。面对这样的case我们两步做。第一步,需要分割字符串;第二步,和id进行关联。通过以上指导方针形成两种sql语句。

第一种写法--表值函数分割

SELECT
id
,t02.item
FROM dbo.aaa AS t01 CROSS apply dbo.Split(t01.name,',') AS t02
--dbo.Split为自定义的字符串分割函数,这个可以自己定义

第一种写法--表值函数分割

第二种写法--xml分割

SELECT
tb01.id
,tb02.VALUE
FROM(
SELECT
id
,[value] = CONVERT(xml,'<root><v>' + REPLACE(name, ',', '</v><v>') + '</v></root>')
FROM dbo.aaa ) AS tb01
OUTER APPLY(
SELECT
VALUE = N.v.VALUE('.', 'varchar(100)') FROM tb01.[value].nodes('/root/v'
) N(v) ) AS tb02

第二种写法--xml分割

执行结果如图所示:

数据的合并:

在2005版本出来之前,数据合并是一件很麻烦的事情而且效率低下。现在具体讲一下05之后的具体做法,即通过xml操作执行。Case如下:现有一张表bbb,如图所示:

现需要将其进行Group by id进行数据合并,怎么做?

具体的sql如下:

结果如下:

 
 
 
标签: Sql Server

(Sql Server)数据的拆分和合并的更多相关文章

  1. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...

  2. 浅谈SQL Server数据内部表现形式

    在上篇文章 浅谈SQL Server内部运行机制 中,与大家分享了SQL Server内部运行机制,通过上次的分享,相信大家已经能解决如下几个问题: 1.SQL Server 体系结构由哪几部分组成? ...

  3. SQL server数据缓存依赖

    SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持        主要包含以下几 ...

  4. [SQL]SQL Server数据表的基础知识与增查删改

    SQL Server数据表的基础知识与增查删改 由张晨辉(学生) 于19天 前发表 | 阅读94次 一.常用数据类型 .整型:bigint.int.smallint.tinyint .小数:decim ...

  5. Sql Server数据的加密与解密

    Sql Server数据的加密与解密 在sql server中,我们如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号,一般不能使用正常数值来存储.否则会有安全隐患.以 ...

  6. delphi 2010 导出sql server 数据到DBF乱码问题

    近日,由于业务需要导出sql server 数据到DBF文件,要查询多表记录,并适当处理后生成导出DBF文件,系统使用delphi2010平台开发. 首先按要求在VFP里创建DBF表,字段数有240个 ...

  7. SQL server数据库内置账户SA登录设置

    SQL server数据库内置账户SA登录不了   设置SQL Server数据库给sa设置密码的时候  提示18456 解决步骤:   第二步:右击sa,选择属性: 第三步:点击状态选项卡:勾选授予 ...

  8. SQL Server数据转MySql

    正好用到SQL Server数据转MySql的知识,就分享一下, 准备:需要用到  Navicat Premium 百度上下载就好 1.打开连接MySQL数据库,新建数据库,双击数据库点击导入 2.导 ...

  9. SQL Server 数据导入Mysql具体教程

    SQLServer2005数据导入Mysql到具体教程(測试) SQL SERVER数据导入MYSQL文件夹   1.Navicat for MySQL 版本号10.0.9 2.创建目标数据库 3.创 ...

随机推荐

  1. PHP移动互联网的发展票据(6)——MySQL召回数据库基础架构[1]

    原文地址 :http://www.php100.com/html/php/api/2014/0326/6707.html 一.数据类型 1.整型 数据类型 存储空间 说明 取值范围 TINYINT 1 ...

  2. JS开发调试

    开发调试工具   页面制作之开发调试工具(1) 开发工具介绍 开发工具一般分为两种类型:文本编辑器和集成开发环境(IDE) 常用的文本编辑器:Sublime Text.Notepad++.EditPl ...

  3. 使用jquery实现放大镜效果

    原文:使用jquery实现放大镜效果 实现原理 首先,我们讲解一下放大镜效果的实现方式: 方法一:准备一张高像素的大图,当鼠标放到原图上,加载显示大图的对应位置. 方法二:对原图片进行放大,也就是调整 ...

  4. APP 半自适应 WEB页面

    特别赶,响应式纯自适应的,有空写了新的发. (在手机上看,页面上看一定乱) <!DOCTYPE html><html> <head> <meta http-e ...

  5. 【 D3.js 进阶系列 — 5.0 】 直方图

    直方图用于描写叙述概率分布,D3 提供了直方图的布局 Histogram 用于转换数据. 假设有数组 a = [10, 11, 11.5, 12.5, 13, 15, 19, 20 ],如今把10~2 ...

  6. leetcode第三题--Longest Substring Without Repeating Characters

    Problem:Given a string, find the length of the longest substring without repeating characters. For e ...

  7. PHP专业开发IDE——Zend Studio 10.5预览版发布

    Zend Studio是新一代的PHP IDE,高效的开发和维护PHP代码是它的核心.Zend公司目前已发布了Zend Studio 10.5预览版,预览版中提高了快速响应能力和时时误差检查.因此使用 ...

  8. css @media认识

    css2的@media css2里面尽管支持@media属性.可是能实现的功能比較少,一般仅仅用做打印的时候做特殊定义的CSS. 语法: @media sMedia { sRules } 说明: sM ...

  9. 【转】浏览器DNS 预取读技术的危害

    今天中午在http://news.ycombinator.com/news看到一篇文章标题: Saved 10 billion DNS queries per month by disabling D ...

  10. OWC11生成统计图案例

    (1)饼状图:----通过修改参数生成不同的走势图, string strCategory = "优良率" + '\t' + "合格率" + '\t' + &q ...