It's a temporary result set that is defined within the execution scope of a single SELECT, INSERT, UPDATE, DELETE, or CREATE VIEW statement. It is not stored as an object and lasts only for the duration of the query. A CTE can be self-referencing and can be referenced multiple times in the same query.
Syntax
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
SELECT <column_list> FROM expression_name;
Multiple cTE
WITH expression_name1 [ ( column_name [,...n] ) ],
expression_name2 [ ( column_name [,...n] ) ]
select <column_list> FROM expression_name1
union all
select <column_list> FROM expression_name2
select <column_list> FROM expression_name1 en1 inner join expression_name2 en2 on en1.column_name= en2.column_name
Syntax
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
SELECT <column_list> FROM expression_name;
Multiple cTE
WITH expression_name1 [ ( column_name [,...n] ) ],
expression_name2 [ ( column_name [,...n] ) ]
select <column_list> FROM expression_name1
union all
select <column_list> FROM expression_name2
select <column_list> FROM expression_name1 en1 inner join expression_name2 en2 on en1.column_name= en2.column_name