2017-08-13 94 views
-2

獲取總,我有以下查詢:從CTE查詢

WITH Years AS 
( 
    SELECT 2004 AS [Year] 
    UNION 
    SELECT 2005 
    UNION 
    SELECT 2006 
    UNION 
    SELECT 2007 
    UNION 
    SELECT 2008 
) 
SELECT * 
FROM Years 

結果:

Years >> Alias Column 
2005 
2006 
2007 
2008 

這將返回年。基於這些年,我需要從AdventureWorks2012.Sales.SalesOrderHeader

得到的總訂單號我應該如何編碼?聯盟?我不應該修改我的第一個代碼,但需要在它之後添加一些代碼,所以當我選擇代碼時,F5(執行),它應該顯示總計。另外,最後應該有一個字符串「Total Orders:」加上CTE所有年份的總和。

下面是結果:

Year   TotalOrders 
---------------------------- 
2005    1379 
2006    3692 
2007   12443 
2008   13951 
Total Orders: 31465 

回答

0

首先,你應該得到的計數,其中訂購日期在AdventureWorks2012年等於在CTE的這一年,然後由年級組它 - 這是CTE「TEMP」從我的查詢下面。然後總結計數並添加聯盟的「總訂單:」。

temp AS 
(
    SELECT  CAST([Year] AS Varchar(15)) AS [Year], 
       COUNT(*) AS [TotalOrders] 
    FROM  Years 
    INNER JOIN AdventureWorks2012.Sales.SalesOrderHeader 
    ON   DATEPART(YEAR, OrderDate) = Year 
    GROUP BY [Year] 
) 

SELECT [Year], 
     [TotalOrders] 
FROM temp 
UNION 
SELECT 'Total Orders: ', 
     SUM([TotalOrders]) 
FROM temp 
+0

您能更具體嗎?溫度從哪裏來?由於年份來自CTE表,所以選擇代碼和執行都不起作用。 – Bill

+0

@Bill temp CTE是從您的CTE年份開始引用的,因爲您提到過它不應該被觸及。通過在您的CTE之後添加逗號( - 年)(...),溫度也將被視爲CTE。 –