2013-07-19 5 views
-1

Я хочу использовать несколько CTE в моем запросе, но я не смог заставить его работать. Ниже приведен пример того, что я хотел бы сделать:Использование нескольких CTE в одном заявлении

WITH tbl1 AS 
    (SELECT * 
    FROM tblStuff) 

WITH tbl2 AS 
    (SELECT tbl1.fldStuff1 ... 
    FROM tbl1, tblStuff2) 

    SELECT * 
    FROM tbl2 
+0

Мое время штамповано раньше вашего? Почему так рассердился сегодня @AaronBertrand? Вы лучше этого :( – Meff

ответ

8
WITH tbl1 AS 
    (SELECT * 
    FROM tblStuff), 

tbl2 AS 
    (SELECT tbl1.fldStuff1, tbl1.fldStuff2, tblStuff2.fldStuff1, tblStuff2.fldStuff2 
    FROM tbl1, tblStuff2) 

    SELECT * 
    FROM tbl2 

При использовании несколько КТРА, нет необходимости в дополнительном WITH, индивидуальной с запятой.

+3

-1 для того, чтобы не прекращать ваше утверждение с помощью ';'. [Ссылка] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and- джентльмены-start-your-semi-colons.aspx) – Kermit

+0

+1 для ссылки на блог Аарона для этого – Meff

+2

Да, он умный. – Kermit

14

Вам нужно только указать WITH один раз. Затем вы можете перечислить дополнительные CTE, разделенные запятой. Например .:

WITH cte1 AS 
(
    ... 
), 
cte2 AS 
(
    ... 
) 
SELECT ...; 
Смежные вопросы