SQL Server 2008 CTE(共通テーブル式)の使い方

CTE(Common Table Expression)は、SQL99規格に準拠した機能で、SQL Server 2005 からサポートされました。
一時テーブルやテーブル変数と同じように SELECT ステートメントの結果に対して名前を付けて保存することができます。
使い方は次のとおりです。

WITH 式名 [(列名1, 列名2, ...)]
 AS
( SELECT ステートメント)

CTE を利用すると次のような再帰クエリで利用することができます。

-- 再帰クエリの例
WITH cte1 (社員番号, 社員名, 上司社員番号, 階層)
AS
(
 -- 上司
 SELECT 社員番号, 社員名, 上司社員番号, 0
  FROM 社員
   WHERE 社員番号 = 1001

	UNION ALL

 -- 部下(再帰クエリ)
 SELECT e.社員番号, e.社員名, e.上司社員番号, cte1.階層 + 1
  FROM 社員 AS e
   INNER JOIN cte1
     ON e.上司社員番号 = cte1.社員番号
)
SELECT * FROM cte1