CTE之所以与其他表表达式不同,是因为它支持递归查询:

定义一个递归CTE,至少需要两个查询(或者更多),第一个查询称为定位点成员(anchor member),第二个查询称为递归成员(recursive member),基本格式如下:

定位点成员只是返回有效关系结果表的查询,与用于非递归查询类似,定位点成员查询只被执行一次。

递归成员是一个引用了CTE名称的查询,对CTE名称的引用表示查询在一个执行序列中逻辑上的“前一个结果集”,第一次调用递归成员时,它表示的就是定位点成员的查询结果,之后调用递归时,引用CTE则代表前一次调用所返回的结果集。

递归成员没有显示的递归终止检查,递归成员会一直被重复调用,直到返回空的结果集或者超出了某种限制条件。

在返回的查询结果上,两个成员必须保持一直(列的属性);

例如:

定位点成员对HR.Employees表中empid=2的结果进行查询,这个查询只执行一次;

递归成员则对CTE(前一次查询的结果集)和Employees表进行连接查询,返回前一次结果集中雇员的下级。直到返回结果为空,终止递归,默认情况下递归次数不超过100次,超过100次会终止,可以修改默认设置。

视图和内联表值函数(inline TVF)是一种可重用的表表达式,它们是保存在数据库中的,除非drop掉,否则属于永久可用的部分。

内联表值函数,支持输入参数,其他方面和视图很像,可以非正式的看成是支持输入参数的视图。

数据库透视转换:所谓透视转换(pivoting)就是把数据从行的状态转化为列的状态,当然对应的还有逆透视转换(unpivoting):就是数据从列的状态转化为行的状态。

透视转换的标准解决方案就是通过一种非常直接的方式处理转换中的三个阶段,分组阶段通过group来实现,扩展阶段通过分别给每个目标指定case表达式来实现,这个要事先知道每个扩展目标的取值,并为每个值指定一个单独的case表达式,如果事先不知道要扩展的值,而且希望从数据中查询出这些值,就得使用动态SQL来构建查询字符串,并进行查询。

select empid,

sum(case when custid='A' then qty end) as A,

sum(case when custid='B' then qty end) as B,

sum(case when custid='C' then qty end) as C,

sum(case when custid='D' then qty end) as D

from dbo.Orders group by empid

在sql server 2005以后便可使用T_SQL中的pivot来做透视转换:

PIVOT运算符也是在查询的from子句的上下文中执行操作。它对某个源表或者表表达式进行操作、透视数据,再返回一个结果表。PIVOT运算符同样设计前面介绍的三个逻辑处理阶段(分组、扩展和聚合)和同样的透视转换元素,但使用的是不同的、SQL Server原生的(native)语法。

其语法格式为:

PIVOT后圆括号内指定聚集函数(比如sum)聚集元素、扩展元素以及目标列名称的列表,as后面可以为结果表指定一个别名。

select * from cte_order

pivot(sum (qty) for custid in(A,B,C,D)) as newtable

SQL Server 2008引入了merge语句,它能在一条语句中根据不同的逻辑进行不同的操作,比如可以根据不同的逻辑进行(delete,update,insert);

Merge是基于连接语义的,在merge子句中指定目标表的名称,在using子句中指定源表的名称,通过on子句来定义和并条件。

在merge语句中,可以通过when matched then定义当找到匹配时执行的操作,通过when not matched then子句定义没有找到匹配时执行的操作。

例如:

merge into emp as a--确定目标表

using employees as b--确定源表

on a.firstname=b.firstname--匹配条件

when matched then--满足匹配条件时执行update(注意和update语句区别)

update set a.lastname=b.lastname,

a.mgrid=b.mgrid

when not matched then--未满足匹配条件时(注意和insert语句区别)

insert (firstname,lastname,mgrid) 

values(b.firstname,b.lastname,b.mgrid);--最后要加分号结束

在merge语句中也可以定义第三种字句when not matched by source,表示当目标表中的一个行,在来源表中没有行可以与之匹配的时候,和when not matched 区别在于:when not matched表示目标表中没有,而源表中有;when not matched by source 表示目标表中有,但是源表中没有。

也可以为子句增加and选项,当全部满足的时候,才会执行:

记录下关于SQL Server的东西的更多相关文章

  1. 在Windows2008下安装SQL Server 2005无法启动服务的解决办法

    在Windows2012下安装SQL Server 2005无法启动服务的解决办法 1.正常安装任一版本的SQL Server 2005. 2.安装到SqlServer服务的时候提示启动服务失败  此 ...

  2. 大数据量下的SQL Server数据库自身优化

    原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情 ...

  3. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  4. windows 7系统下安装SQL Server 2005图文教程

    由于工作需要,今天要在电脑上安装SQL Server 2005.以往的项目都是使用Oracle,MS的数据库还真的没怎么用过,安装Oracle已经轻车熟路,但装SQL Server好像还有点小麻烦,所 ...

  5. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  6. 大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...

  7. 【转】Win8下安装SQL Server 2005无法启动服务

    安装了Windows8,但是发现不支持Sql Server 2005的安装.网上找了很多办法,基本上都有缺陷.现在终于找到一种完全正常没有缺陷的办法了,和大家分享一下. 1.正常安装任一版本的SQL ...

  8. win2008下安装SQL SERVER 2005出现IIS功能要求 警告解决方案

    原因: 出现此问题的原因取决于 SQL Server 的不是所有 IIS 7.0 组件都安装在计算机上.下表列出了受影响的组件. 收起该表格展开该表格   组件 文件夹 静态内容 常见的 HTTP 功 ...

  9. (转)大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...

随机推荐

  1. 【转】细说Cookie

    阅读目录 开始 Cookie 概述 Cookie的写.读过程 使用Cookie保存复杂对象 Js中读写Cookie Cookie在Session中的应用 Cookie在身份验证中的应用 Cookie的 ...

  2. hdu 3709 数字dp(小思)

    http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...

  3. C语言库函数大全及应用实例五

    原文:C语言库函数大全及应用实例五                                                 [编程资料]C语言库函数大全及应用实例五 函数名: getcurdi ...

  4. C语言库函数大全及应用实例二

    原文:C语言库函数大全及应用实例二                                              [编程资料]C语言库函数大全及应用实例二 函数名: bioskey 功 能 ...

  5. Effective C++:规定34:区分接口继承和实现继承

    (一个) class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); ...

  6. 在asp.net页面上按回车会触发Imagebutton控件的Click事件

    原文:在asp.net页面上按回车会触发Imagebutton控件的Click事件 问题: 用asp.net做的aspx页面,无论是否有文本框.下拉框.复选框……获得焦点,只要在当前页面上按一下回车就 ...

  7. CI框架 .htaccess 隐藏url在index.php解决方案

    CodeIgniter(下面简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5.是开发中小型可拓展性需求高的Web应用程序的利器.眼下你所见到的这个博客 ...

  8. Spring IOC 之ApplicationContext的其他功能

    正如上面章节所介绍的那样, org.springframework.beans.factory 包提供了管理和操作beans的 基本功能. org.springframework.context包增加 ...

  9. Your build host version of Xamarin.IOS (release NO.)is too recent to work with the IOS designer

    Encounted such error in VS after I update the xamarin at Mac side.Here is the solution for u to refe ...

  10. 数据访问层的改进以及测试DOM的发布

    数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...