[MSSQL2005]再看CTE
个人认为CTE最大的做点是可以处理树状存储的数据了
例如类似这样设计的数据表,ID,ParentID这样的设计使用CTE就非常方便,原因就是CTE可以自引用,达到类似递归的效果
那么问题来了,如何使用呢?
想深入学习CTE的看这里
http://www.codeproject.com/Articles/265371/Common-Table-Expressions-CTE-in-SQL-SERVER
https://www.simple-talk.com/sql/t-sql-programming/sql-server-cte-basics/
想直接使用COPY下边的代码,F5看一眼即知,
#1 使用到的测试数据
DECLARE @CTEEXAMPLE TABLE
(
EmployeeID int NOT NULL PRIMARY KEY,
FirstName varchar(50) NOT NULL,
LastName varchar(50) NOT NULL,
ManagerID int NULL
)
INSERT INTO @CTEEXAMPLE VALUES (101, 'Ken', 'Sánchez', NULL)
INSERT INTO @CTEEXAMPLE VALUES (102, 'Terri', 'Duffy', 101)
INSERT INTO @CTEEXAMPLE VALUES (103, 'Roberto', 'Tamburello', 101)
INSERT INTO @CTEEXAMPLE VALUES (104, 'Rob', 'Walters', 102)
INSERT INTO @CTEEXAMPLE VALUES (105, 'Gail', 'Erickson', 102)
INSERT INTO @CTEEXAMPLE VALUES (106, 'Jossef', 'Goldberg', 103)
INSERT INTO @CTEEXAMPLE VALUES (107, 'Dylan', 'Miller', 103)
INSERT INTO @CTEEXAMPLE VALUES (108, 'Diane', 'Margheim', 105)
INSERT INTO @CTEEXAMPLE VALUES (109, 'Gigi', 'Matthew', 105)
INSERT INTO @CTEEXAMPLE VALUES (110, 'Michael', 'Raheem', 106);
#2 CTE递归查询
DECLARE @CTEEXAMPLE TABLE
(
EmployeeID int NOT NULL PRIMARY KEY,
FirstName varchar(50) NOT NULL,
LastName varchar(50) NOT NULL,
ManagerID int NULL
)
INSERT INTO @CTEEXAMPLE VALUES (101, 'Ken', 'Sánchez', NULL)
INSERT INTO @CTEEXAMPLE VALUES (102, 'Terri', 'Duffy', 101)
INSERT INTO @CTEEXAMPLE VALUES (103, 'Roberto', 'Tamburello', 101)
INSERT INTO @CTEEXAMPLE VALUES (104, 'Rob', 'Walters', 102)
INSERT INTO @CTEEXAMPLE VALUES (105, 'Gail', 'Erickson', 102)
INSERT INTO @CTEEXAMPLE VALUES (106, 'Jossef', 'Goldberg', 103)
INSERT INTO @CTEEXAMPLE VALUES (107, 'Dylan', 'Miller', 103)
INSERT INTO @CTEEXAMPLE VALUES (108, 'Diane', 'Margheim', 105)
INSERT INTO @CTEEXAMPLE VALUES (109, 'Gigi', 'Matthew', 105)
INSERT INTO @CTEEXAMPLE VALUES (110, 'Michael', 'Raheem', 106);
WITH cteReports (EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID, FirstName, LastName, ManagerID, 1
FROM @CTEEXAMPLE
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID,
r.EmpLevel + 1
FROM @CTEEXAMPLE e
INNER JOIN cteReports r ON e.ManagerID = r.EmpID
)
SELECT
R.EmpID,R.FirstName + R.LastName 'fullName',R.MgrID,R.EmpLevel,
'Employee<----|---->Manager',
C.FirstName + C.LastName 'fullName'
FROM cteReports R
LEFT JOIN @CTEEXAMPLE C ON R.MgrID = C.EmployeeID
ORDER BY EmpLevel, MgrID
[MSSQL2005]再看CTE的更多相关文章
- 再看Ajax
再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- ...
- 再看ftp上传文件
前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...
- 再看 AspriseOCR - OCR应用开发 -20151124
再看 AspriseOCR - OCR应用开发 我写这个博文时间为 2015/11/24日,注意时间因为,网上很多文章时间上很久远,有的已经不能参考了 很多人面对从图片中识别文字或者数字0~9 A~ ...
- Android菜鸟的成长笔记(17)—— 再看Android中的Unbounded Service
原文:Android菜鸟的成长笔记(17)-- 再看Android中的Unbounded Service 前面已经写过关于startService(Unbounded Service)的一篇文章:&l ...
- 再看case语句
再看case语句,case语句只处理单条记录,而不是set 列名的使用,可以当做数值来使用: case when 后面简直是完美的的,什么东西都是能放的,只要是一个逻辑上的true/false的逻辑就 ...
- android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
- python基础----再看property、描述符(__get__,__set__,__delete__)
一.再看property 一个静态属性property ...
- perf使用的问题,再看perf record,perf record 设置的采样频率,采样频率是如何体现在
当perf stat -e branches 是统计 再看perf record,perf record是为了是记录时间发生的时候的调用栈, 在我的测试代码中总共有200,000,000条branch ...
- 再看Scrapy(1) 基本概念
再看Scrapy(1) 基本概念 1 准备 安装scrapy: 国内镜像源(官方的pypi不稳定)安装 pip3 install -i https://pypi.douban.com/simple/ ...
随机推荐
- HP XP7 GAD双活实现的理解
XP7双活的虚拟卷global active device (GAD)实际上对应两个存储的两个物理卷(有点儿像Mirror Disk镜像) 当主机A向阵列A发出写数据请求后,阵列A首先检查要被写入的数 ...
- 【转】awk、nawk、mawk、gawk的简答介绍
来自http://blog.sina.com.cn/s/blog_3d2d79aa0100h47h.html awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准 ...
- POJ(3468)
A Simple Problem with Integers http://poj.org/problem?id=3468 #include <stdio.h> struct node { ...
- WebForm---登陆状态保持(Cookies内置对象)
登录状态保持: 首先做一个登录界面,点击 登录按钮 protected void Page_Load(object sender, EventArgs e) { Button1.Click += Bu ...
- {CSDN}{英雄会}{反相互}
思路: 给定一个字符串,求两个不重叠的字串,他们翻转互补.其中一个字符串可以是删掉最多两个字符的原字符串子串. 动态规划,由于可以对子串进行删除操作,我首先想到了LCS问题,但需要枚举所有的长度,这样 ...
- Python list方法总结
1. 向列表的尾部添加一个新的元素 append(...) L.append(object) -- append object to end 1 2 3 4 >>> a = ['sa ...
- C#去掉list集合中的重复数据
List<string> conList= new List<string>(); List<string> listII = new List<string ...
- Principal Component Analysis(PCA) algorithm summary
Principal Component Analysis(PCA) algorithm summary mean normalization(ensure every feature has sero ...
- delphi对象赋值
Delphi的对象之间赋值主要要注意几个方面的问题: 1.对象之间的 :=赋值只是地址赋值,即是将当前对象的地址赋值到变量中,定义的变量可以是不用初始化的,在内存中两个变量指向的是同一地址空间: ...
- python-操作MySQL数据库
1.安装MySQLdb? 为了用DB-API编写MySQL脚本,必须确保已经安装了MySQL.复制以下代码,并执行: #!/usr/bin/python # -*- coding: UTF-8 -*- ...