16

このようなことをする必要がありますが、SQL Server 2008 はそれを好みません。私のクエリは実際にはこれよりも複雑であり、これが私がやっていることを達成するための最良の方法ではないことを認識していますが、私は select ステートメントと where ステートメントではなく、WITH ステートメントの機能に焦点を当てています。

WITH stuff1 AS (開始日 > 0 の従業員から名前、開始日、ID を選択)

WITH stuff2 AS ( stuff1 から名前、開始日、ID を選択)

select * from stuff2 where id > 10

4

3 に答える 3

33

私はいつもそれをします:

WITH stuff1 AS (
    SELECT name
           ,startdate
           ,id
    FROM employees
    WHERE startdate > 0
)
,stuff2 AS (
    SELECT name
           ,startdate
           ,id
    FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10

私が知る限り、CTE の上限に達していません。

できない唯一のこと (これは非常に便利です) は、CTE を別SELECTの sで再利用することです。

WITH stuff1 AS (
    SELECT name
           ,startdate
           ,id
    FROM employees
    WHERE startdate > 0
)
,stuff2 AS (
    SELECT name
           ,startdate
           ,id
    FROM stuff1
)
SELECT *
FROM stuff2
WHERE id > 10
;
SELECT *
FROM stuff2
WHERE id < 10

言う。代わりに、CTE チェーン全体をもう一度コピーして貼り付ける必要があります。

于 2009-01-28T21:01:15.457 に答える
-3

いいえ、先日分かったように、ステートメントには CTE を 1 つしか含めることができません。

EDIT : そして、WITH ステートメントは Common Table Expression であり、非常に便利な機能です。

于 2009-01-28T19:46:06.263 に答える