公用表表示式 CTE

2022-01-13 23:26:53 字數 1753 閱讀 9023

下面看在cte中分配列別名的兩種格式:內聯格式和外部格式。

內聯格式:

1

with c as2(

3select

year(orderdate) as

orderyear, custid

4from

sales.orders5)

6select orderyear, count(distinct custid) as

numcusts

7fromc8

group

by orderyear;

外部格式:

1

with c(orderyear, custid) as2(

3select

year

(orderdate), custid

4from

sales.orders5)

6select orderyear, count(distinct custid) as

numcusts

7fromc8

group

by orderyear;

定義多個cte只需要在同乙個with子句中用逗號把它們分隔開即可。每個cte可以引用在它前面定義的所有cte,而外部查詢則可以引用所有cte,例如:

1

with c1 as2(

3select

year(orderdate) as

orderyear, custid

4from

sales.orders5),

6 c2 as7(

8select orderyear, count(distinct custid) as

numcusts

9from

c110

group

byorderyear11)

12select

orderyear, numcusts

13from

c214

where numcusts >

70;

cte還可以實現對資料的遞迴查詢。以下**演示了如何使用遞迴cte來返回有關某個雇員(don funk,雇員id為2)及其所有各級(直接或間接)下屬的資訊:

1

with empscte as2(

3select

empid, mgrid, firstname, lastname

4from

hr.employees

5where empid =26

7union

all8

9select

c.empid, c.mgrid, c.firstname, c.lastname

10from empscte asp11

join hr.employees asc12

on c.mgrid =

p.empid13)

14select

empid, mgrid, firstname, lastname

15from empscte;

為了安全起見,sql server預設把遞迴成員最多可以呼叫的次數限制為100次,當遞迴成員的呼叫次數超過這個值時,**將會因遞迴失敗而終止執行。如要修改預設最大遞迴次數,可以在外部查詢的最後指定option(maxrecursion n)提示(hint),這裡的n的範圍是0到32767之間的整數。如果想要去掉此限制,可將maxrecursion設為0。

公用表表示式CTE

公用表表示式cte表面上和派生表非常相似,看起來只是語義上的區別。但和派生表比較起來,cte具有幾個優勢 第一,如果須要在乙個cte中引用另乙個cte,不需要像派生表那樣巢狀,相反,只要簡單地在同乙個with子句中定義多個cte,並用逗號把它們分隔開。每個cte可以引用在它前面定義的所有cte。而外...

公用表表示式 CTE

在編寫t sql 時,往往需要臨時儲存某些結果集。前面我們已經廣泛使用和介紹了兩種臨時儲存結果集的方法 臨時表和表變數。除此之外,還可以使用公用表表示式的方法。公用表表示式 common table expression 是sql server2005版本的引入的乙個特性。cte可以看組是乙個臨時的...

公用表表示式 CTE

在編寫t sql 時,往往需要臨時儲存某些結果集。前面我們已經廣泛使用和介紹了兩種臨時儲存結果集的方法 臨時表和表變數。除此之外,還可以使用公用表表示式的方法。公用表表示式 common table expression 是sql server2005版本的引入的乙個特性。cte可以看組是乙個臨時的...