将两个CTE与UNION组合会导致错误

Cam*_*lle 0 sql sql-server common-table-expression

收到以下错误:

'消息156,级别15,状态1,行53
'关键字'WITH'附近的语法不正确.

消息319,级别15,状态1,行53
关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号结束前一个语句.

当单独运行CTE时,它很好.但是当使用UNION进行组合时,则会出现错误.

With cte1 as 
(
    select
       .
       .
       .

    Select

    from

)
select

UNION

With cte2 as 
(
    Select

    From
)
Select 

from
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

在SQL Server中,CTE连接到最外层select.换句话说,每个查询只有一个,并且所有定义必须在之前select.

所以将它们组合成一个with:

with cte1 as (
      select . . . 
     ),
     cte2 as (
      select . . .
     )
select . . .
from cte1 . . . 
union
select  . . 
from cte2 . . .;
Run Code Online (Sandbox Code Playgroud)