2011-03-21 109 views
0

我必须在20个数据库上运行此查询才能生成一个统一报告。我之前用UNION做过这个。有没有什么方法可以为每个子查询重用WITH语句?我收到一个错误,说以前的语句必须以分号结尾。有没有更好的方法来做到这一点?使用WITH语句的SQL UNION

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 

回答

0

WITH声明表示查询表达内AS子句是Common Table Expression(CTE)。

如果您问是否可以编写多个使用CTE的查询,那么答案是否定的。最接近的近似值将创建一个内联table-valued function。 (普通表值函数与内联表值函数的简单定义是,内联版本仅被定义为查询,非常像CTE;您不能在函数内执行任何过程操作,包括声明/分配变量)。

0

对我来说,以下工作:

 
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和甲骨文