惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - kkun

audit message types system_call specifies the system call by its name AUDIT SYSTEM REFERENCE ausyscall --dump NodeJS http 模块 NodeJS package.json NodeJS Hello world NodeJS 安装 透过 HoloLens,微软抢先看到了个人计算机的未来 [MSSQL2008]Spatial Data in SQL Server 2008 - 根据经纬度计算两点间距离 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 [MSSQL2012]LEAD函数 [MSSQL2012]First_Value函数 [MSSQL2012]CUME_DIST函数 [MSSQL]SQL疑难杂症实战记录-巧妙利用PARTITION分组排名递增特性解决合并连续相同数据行 [ALM]一步一步搭建MS ALM环境 - 安装TFS + SQL SERVER [ALM]一步一步搭建MS ALM环境 - 安装域服务器 [Hyper-V]制作一个干净的操作系统模板
[MSSQL2005]再看CTE
kkun · 2014-10-13 · via 博客园 - kkun

个人认为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);

001CTE

#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

 002CTE

------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
BUY ME COFFEE