2017-08-13 93 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。 –