SQL 带 CTE 的子查询

SQL subquery with CTE

我有一个分层查询,其中包含常用 Table 表达式:

WITH Revision(REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND) AS
(
    SELECT REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND
    FROM MonitoringGroupBusinessLine_AUD
    WHERE REV = 1045
    UNION ALL
    SELECT rev.REV, rev.MonitoringGroupId, rev.BusinessLineId, rev.REVTYPE, rev.REVEND
    FROM MonitoringGroupBusinessLine_AUD rev
    INNER JOIN Revision ON rev.REVEND = Revision.REV
)
SELECT 
    DISTINCT
    MonitoringGroupId, 
    BusinessLineId, 
    IIF(REVTYPE = 2, 'REMOVE', 'ADD') as Operation
FROM Revision

我想将它用作子查询,类似这样:

SELECT audit.MonitoringGroupId, audit.BusinessLineId, audit.Operation
FROM
(
    WITH Revision(REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND) AS
    (
        SELECT REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND
        FROM MonitoringGroupBusinessLine_AUD
        WHERE REV = 1045
        UNION ALL
        SELECT rev.REV, rev.MonitoringGroupId, rev.BusinessLineId, rev.REVTYPE, rev.REVEND
        FROM MonitoringGroupBusinessLine_AUD rev
        INNER JOIN Revision ON rev.REVEND = Revision.REV
    )
    SELECT 
        DISTINCT
        MonitoringGroupId, 
        BusinessLineId, 
        IIF(REVTYPE = 2, 'REMOVE', 'ADD') as Operation
    FROM Revision
) audit

我有一个错误:

Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.

我试过在WITH前加上;,还是不行。如何将我的分层查询用作子查询?

您在输出中创建子查询。

;WITH Revision(REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND) AS
(
    SELECT REV, MonitoringGroupId, BusinessLineId, REVTYPE, REVEND
    FROM MonitoringGroupBusinessLine_AUD
    WHERE REV = 1045
    UNION ALL
    SELECT rev.REV, rev.MonitoringGroupId, rev.BusinessLineId, rev.REVTYPE, rev.REVEND
    FROM MonitoringGroupBusinessLine_AUD rev
    INNER JOIN Revision ON rev.REVEND = Revision.REV
)
SELECT audit.MonitoringGroupId, audit.BusinessLineId, audit.Operation
FROM
(
    SELECT 
        DISTINCT
        MonitoringGroupId, 
        BusinessLineId, 
        IIF(REVTYPE = 2, 'REMOVE', 'ADD') as Operation
    FROM Revision
) audit