从CTE查询中获取总数

时间:2017-08-13 17:49:41

标签: sql-server string common-table-expression

我有以下查询:

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

1 个答案:

答案 0 :(得分:0)

首先,您应该获得AdventureWorks2012中的Orderdate年份等于您在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
相关问题