• 公用表表达式(CTE)


    下面看在CTE中分配列别名的两种格式:内联格式和外部格式。

    内联格式:

    1 WITH C AS
    2 (
    3   SELECT YEAR(orderdate) AS orderyear, custid
    4   FROM Sales.Orders
    5 )
    6 SELECT orderyear, COUNT(DISTINCT custid) AS numcusts
    7 FROM C
    8 GROUP BY orderyear;

    外部格式:

    1 WITH C(orderyear, custid) AS
    2 (
    3   SELECT YEAR(orderdate), custid
    4   FROM Sales.Orders
    5 )
    6 SELECT orderyear, COUNT(DISTINCT custid) AS numcusts
    7 FROM C
    8 GROUP BY orderyear;

     定义多个CTE只需要在同一个WITH子句中用逗号把它们分隔开即可。每个CTE可以引用在它前面定义的所有CTE,而外部查询则可以引用所有CTE,例如:

     1 WITH C1 AS
     2 (
     3   SELECT YEAR(orderdate) AS orderyear, custid
     4   FROM Sales.Orders
     5 ),
     6 C2 AS
     7 (
     8   SELECT orderyear, COUNT(DISTINCT custid) AS numcusts
     9   FROM C1
    10   GROUP BY orderyear
    11 )
    12 SELECT orderyear, numcusts
    13 FROM C2
    14 WHERE numcusts > 70;

    CTE还可以实现对数据的递归查询。以下代码演示了如何使用递归CTE来返回有关某个雇员(Don Funk,雇员ID为2)及其所有各级(直接或间接)下属的信息:

     1 WITH EmpsCTE AS
     2 (
     3   SELECT empid, mgrid, firstname, lastname
     4   FROM HR.Employees
     5   WHERE empid = 2
     6   
     7   UNION ALL
     8   
     9   SELECT C.empid, C.mgrid, C.firstname, C.lastname
    10   FROM EmpsCTE AS P
    11     JOIN HR.Employees AS C
    12       ON C.mgrid = P.empid
    13 )
    14 SELECT empid, mgrid, firstname, lastname
    15 FROM EmpsCTE;

    为了安全起见,SQL Server默认把递归成员最多可以调用的次数限制为100次,当递归成员的调用次数超过这个值时,代码将会因递归失败而终止运行。如要修改默认最大递归次数,可以在外部查询的最后指定OPTION(MAXRECURSION n)提示(hint),这里的n的范围是0到32767之间的整数。如果想要去掉此限制,可将MAXRECURSION设为0。

  • 相关阅读:
    端接介绍及其种类
    特邀美国EMC实战专家Mark来华授课
    最简单的方式来理解阻抗、反射和端接
    如何用TDR来测试PCB板的线路阻抗
    TDR分辨率
    TDR测试原理
    长沙研讨会3月24日约您亲临现场
    如何计算阻抗(下)
    如何计算阻抗(上)
    为什么PCB上的单端阻抗控制50欧姆
  • 原文地址:https://www.cnblogs.com/laixiancai/p/4351977.html
Copyright © 2020-2023  润新知