2015-10-02 3 views
0

Например, у меня есть 2 или более аргументов WITH, например, приведенные ниже коды.Как объединить несколько предложений WITH в SQL Server 2008?

Как объединить несколько операторов WITH? Прошу совета, спасибо большое.

SQL Server:

-- 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» 1 и 2? –

+0

Все три CTE (Common Table Expression), кажется, выбирают точно такие же столбцы из точно такой же таблицы для точно таких же критериев .... –

ответ

1

Отделить их просто , и удалить WITH

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

SELECT * FROM sum_sales1 
UNION 
SELECT * FROM sum_sales2 
Смежные вопросы