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
我有一个分层查询,其中包含常用 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