使用WITH语句的SQL联合

使用WITH语句的SQL联合,sql,union,Sql,Union,我必须在20个数据库上运行此查询才能生成一个统一的报告。我以前和工会一起做过。有没有办法对每个子查询重用WITH语句?我收到一个错误,上面的语句必须以分号结尾。有没有更好的办法 WITH DUPS (DocNum) AS ( SELECT DocNum FROM Akron.dbo.PWZ3 INNER JOIN Akron.dbo.OPWZ T5 ON T5.IdNumber = PWZ3.IdEntry WHERE T5.PmntDate = '3/10/20

我必须在20个数据库上运行此查询才能生成一个统一的报告。我以前和工会一起做过。有没有办法对每个子查询重用WITH语句?我收到一个错误,上面的语句必须以分号结尾。有没有更好的办法

WITH
DUPS (DocNum)
AS (
    SELECT DocNum
    FROM Akron.dbo.PWZ3
    INNER JOIN Akron.dbo.OPWZ T5 ON T5.IdNumber = PWZ3.IdEntry
    WHERE T5.PmntDate = '3/10/2011'
    GROUP BY DocNum
    HAVING COUNT(1) > 1;
)
SELECT PWZ3.IdEntry, PWZ3.DocNum, 'ARK' + PWZ3.CardCode, QUOTENAME(CardName,'"'), 
Convert(Decimal(10,2),PayAmount), Convert(Decimal(10,2),InvPayAmnt), 
CONVERT(VARCHAR(10), T5.PmntDate,101), NumAtCard, PymMeth, ObjType
FROM Akron.dbo.PWZ3 PWZ3
INNER JOIN DELAWARE.dbo.OPWZ T5 ON T5.IdNumber = PWZ3.IdEntry
LEFT JOIN Dups ON DUPS.DocNum = PWZ3.DocNum 
WHERE T5.PmntDate = '3/10/2011'
AND T5.Canceled = 'N' 
AND Checked = 'Y'
AND Dups.DocNum is null
WITH语句表示AS子句中表示的查询是CTE

如果您询问是否可以编写多个使用CTE的查询,那么答案是否定的。最接近的近似值是创建一个内联查询


普通表值函数与内联表值函数的简单定义是,内联版本仅定义为查询,非常类似于CTE;您不能在函数中执行任何过程性操作,包括声明/分配变量。

以下操作适用于我:

WITH stuff AS ( ... some select ) SELECT some_col FROM some_table JOIN stuff ON ... UNION ALL SELECT other_col FROM other_table JOIN stuff ON ... 在PostgreSQL和Oracle上测试