Sql Server 数据的拆分和合并 cross apply和outer apply
2015-10-22 14:27
323 查看
背景:
今天遇到了数据合并和拆分的问题,尝试了几种写法。但大致可分为两类:一、原始写法。二、Sql Server 2005之后支持的写法。第一种写法复杂而且效率低下,不推荐。所以下面具体讲一下第二种写法。
数据的拆分:
再讲拆分前,首先先介绍两个函数:cross apply和outer apply。这两个函数作用是交叉连接。这两个函数是在sql server 2005之后才有的,在2000与之相似的功能是cross join。虽然相似,但是crossjoin有一个致命功能缺陷。详看代码:
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 apply和outer apply,二者可以完全弥补这一缺陷。cross
apply虽然与outer apply功能相似,但是二者也有不同。cross apply与FUNC_TB2交集的结果将去除右边NULL项,而outer apply将包括NULL项。
上面,我们具体讲了两个函数的具体用法,下面讲一下根据以上函数如何进行拆分。现有这样一个Case:有一张表aaa,如图所示
,现需要将name字段中的数据拆分出来。面对这样的case我们两步做。第一步,需要分割字符串;第二步,和id进行关联。通过以上指导方针形成两种sql语句。
第一种写法--表值函数分割
第二种写法--xml分割
执行结果如图所示:
数据的合并:
在2005版本出来之前,数据合并是一件很麻烦的事情而且效率低下。现在具体讲一下05之后的具体做法,即通过xml操作执行。Case如下:现有一张表bbb,如图所示:现需要将其进行Group by id进行数据合并,怎么做?
具体的sql如下:
View
Code
结果如下:
本文来自:fang_beny (转载请注明出处)
转自:http://www.cnblogs.com/fang-beny/archive/2013/08/13/3255171.html
相关文章推荐
- Objective-C Runtime 运行时之三:方法与消息
- android 安装失败 Failure [INSTALL_CANCELED_BY_USER]
- swift闭包函数
- 天空盒有缝隙解决方案
- iOS-App installation failed原因及解决方法
- 深入浅析 Android Fragment(上篇)
- Appache多站点文件服务器配置(不同的端口号)
- Android Intent Flag详解
- Android 对话框(Dialog)大全 建立自己最个性的对话框
- 关于OOM和内存回收的一点浅显的认识
- Android sqlite3工具的使用
- MTK Android flash 配置
- iOS 自定义tabbar的发现
- 微信智慧生活全行业解决方案 促传统行业转型移动互联
- 多个项目引用 android-support-v4.jar 时候冲突问题
- android 照片地理位置 demo
- android下拉菜单spinner的使用方法
- 微信转账开始收费了!以后还是直接发红包吧
- iOS之常用第三方开源框架介绍
- Android EventBus使用与思路总结