在每个唯一客户名称后添加总计行

时间:2017-11-01 23:12:36

标签: sql sql-server sql-server-2008

我正在尝试添加一个' Total'每个唯一客户名称后面的行。我已经尝试过ROLLUP,但由于我尝试分组的字段数量似乎无法正常工作。我正在寻找的一个例子是伪的

( FlavorName(' Total'),2016Sales(总销售额总和),2017销售(总销售额总和),2016TotalPounds(总磅数),2017TotalPounds(总磅数总和))

请在下面找到我目前的代码。

WITH cte AS (SELECT        CustName AS CustomerName, ItemKey AS CICode, Description AS FlavorName, CASE WHEN InvoiceDate BETWEEN '2016-01-01' AND 
                                                      '2016-12-31' THEN SUM(LineNet) ELSE 0 END AS [2016TotalSales], CASE WHEN InvoiceDate BETWEEN '2017-01-01' AND getdate() THEN SUM(LineNet)
                                                       ELSE 0 END AS [2017TotalSales], CASE WHEN InvoiceDate BETWEEN '2016-01-01' AND '2016-12-31' THEN ROUND(SUM(QtyOrd), 2) 
                                                      ELSE 0 END AS [2016TotalPounds], CASE WHEN InvoiceDate BETWEEN '2017-01-01' AND getdate() THEN ROUND(SUM(QtyOrd), 2) 
                                                      ELSE 0 END AS [2017TotalPounds], BasePrice, SUBSTRING(CAST(InvoiceDate AS nvarchar(50)), 8, 5) AS year, UOM
                             FROM            dbo.ABC
                             GROUP BY CustName, ItemKey, Description, BasePrice, InvoiceDate, UOM)
    SELECT        TOP (100) PERCENT CustomerName, CASE WHEN CICode IS NULL THEN 'ALL' ELSE CICode END AS CICode, CASE WHEN BasePrice IS NULL

                              THEN 'TOTALS' ELSE FlavorName END AS FlavorName, SUM([2016TotalSales]) AS [2016Sales], SUM([2017TotalSales]) AS [2017Sales], SUM([2016TotalPounds]) 
                              AS [2016TotalPounds], ROUND(SUM([2017TotalPounds]), 2) AS [2017TotalPounds], UOM, ISNULL(ROUND((SUM([2017TotalPounds]) - SUM([2016TotalPounds])) 
                              / NULLIF (SUM([2016TotalPounds]), 0) * 100, 2), 100) AS [%Change], BasePrice
     FROM            cte AS cte_1
     GROUP BY CustomerName, CICode, FlavorName, BasePrice, UOM
     HAVING         (SUM([2016TotalSales]) + SUM([2017TotalSales]) > 0)

1 个答案:

答案 0 :(得分:0)

尝试GROUPING SETS

GROUP BY GROUPING SETS ( (CustomerName, CICode, FlavorName, BasePrice, UOM), (CustomerName) )

您可能需要使用ORDER BY来按照您想要的特定顺序获得结果。