SQL Server 2005 и выше.
Я хотел бы добавить, что вы можете сложить их с хорошим эффектом:
WITH A AS (
SELECT * FROM X
), B AS (
SELECT * FROM A
), C AS (
SELECT * FROM B
)
SELECT * FROM C
Вы даже можете сделать:
WITH A AS (
), B AS (
)
SELECT * FROM A INNER JOIN B ON whatever
Также обратите внимание, что WITH должно быть первым ключевым словом в выражении, поэтому вы часто видите его в виде:
;WITH A AS (
)
Что в основном завершает предыдущую инструкцию (точки с запятой в T-SQL являются необязательными)