2015-10-02 40 views
0

例如,我有两个或多个WITH子句语句,就像下面作为示例附加的代码一样。如何在SQL Server 2008中结合多个WITH子句?

如何将多个WITH子句语句组合在一起?请多多指教。

SQL服务器:

-- WITH clause 1 
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear) 
AS 
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
) 
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear 
FROM Sales_CTE 
GROUP BY SalesYear, SalesPersonID 

-- WITH clause 2 
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear) 
AS 
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
) 
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear 
FROM Sales_CTE 
GROUP BY SalesYear, SalesPersonID 

-- WITH clause 3 
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear) 
AS 
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
) 
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear 
FROM Sales_CTE 
GROUP BY SalesYear, SalesPersonID 
+0

这真的是SQL Server的?它没有'NATURAL JOIN'。 WITH WITH子句1和2有什么不同? –

+0

所有三个CTE(公共表表达式)似乎都从完全相同的表中选择完全相同的列,完全相同的标准.... –

回答

1

仅通过,将它们分开,并删除WITH

WITH 
    sum_sales1 AS 
    (
     --Code here 
) 
    ,sum_sales2 AS 
    (
     --Code here 
) 

SELECT * FROM sum_sales1 
UNION 
SELECT * FROM sum_sales2