2015-04-02 94 views
1

我看到使用GROUP BY CUBE()会将总行添加到枢轴的底部,并且我一直在尝试让我的语法准确无误,以便能够做到这一点。好吧,我的语法正在运行,但是我没有在结果集底部找到Total。这是为什么?将总行添加到枢轴底部

select * 
FROM 
(
    select case 
    WHEN a.state LIKE 'CA' THEN 'California' 
    WHEN a.state LIKE 'WA' THEN 'Washington' 
    else a.state 
    end As [Full State], 
    SaleID As [Sales By State], 
    CONVERT(VARCHAR(20), dt.CumulativeWeek) AS Week 
    FROM retailsales.Store1 a 
    INNER JOIN retailsales.customCalendar dt 
    ON a.orderDate = dt.orderDate 
    WHERE a.orderDate IS NOT NULL 
    GROUP BY CUBE (SaleID, state, dt.CumulativeWeek) 
) src 
pivot 
(
    COUNT([Sales By State]) 
    For Week IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]) 
) piv 

我试图移动CUBE()声明我的支点之外,但我得到这里编译错误更新代码

select * 
FROM 
(
    select case 
    WHEN a.state LIKE 'CA' THEN 'California' 
    WHEN a.state LIKE 'WA' THEN 'Washington' 
    else a.state 
    end As [Full State], 
    SaleID As [Sales By State], 
    CONVERT(VARCHAR(20), dt.CumulativeWeek) AS Week 
    FROM retailsales.Store1 a 
    INNER JOIN retailsales.customCalendar dt 
    ON a.orderDate = dt.orderDate 
    WHERE a.orderDate IS NOT NULL 
    GROUP BY CUBE (SaleID, state, dt.CumulativeWeek) 
) src 
pivot 
(
    COUNT([Sales By State]) 
    For Week IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]) 
) piv 
GROUP BY CUBE (Full State) 

和产生这个编译错误

Msg 8120, Level 16, State 1, Line 1 
Column 'piv.1' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 
+0

最简单的方法是使用'UNION'。 – 2015-04-02 19:08:27

+0

@ jbarker2160你能告诉我一个例子吗? – 2015-04-02 19:09:43

+0

[这](http://www.w3schools.com/sql/sql_union.asp)是一个很好的资源。 – 2015-04-02 19:11:23

回答

3

UNION ALL与汇总的行将向您显示带有SUM的原始数据透视数据

WITH data AS (
    select * 
    FROM 
    (
     select case 
     WHEN a.state LIKE 'CA' THEN 'California' 
     WHEN a.state LIKE 'WA' THEN 'Washington' 
     else a.state 
     end As [Full State], 
     SaleID As [Sales By State], 
     CONVERT(VARCHAR(20), dt.CumulativeWeek) AS Week 
     FROM retailsales.Store1 a 
     INNER JOIN retailsales.customCalendar dt 
     ON a.orderDate = dt.orderDate 
     WHERE a.orderDate IS NOT NULL 
     GROUP BY CUBE (SaleID, state, dt.CumulativeWeek) 
    ) src 
    pivot 
    (
     COUNT([Sales By State]) 
     For Week IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]) 
    ) piv 
) 
SELECT [Full State] 
    , [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13] 
FROM data 
UNION ALL 
SELECT '' 
    , SUM([1]),SUM([2]),SUM([3]),SUM([4]),SUM([5]),SUM([6]) 
    , SUM([7]),SUM([8]),SUM([9]),SUM([10]),SUM([11]),SUM([12]),SUM([13]) 
FROM data 
+0

谢谢!我试图执行此操作,并收到错误 列名'Week'无效。 - 它强调Select [Full State]周线 – 2015-04-02 19:54:42

+0

这应该将Week列定义为CONVERT(VARCHAR(20),dt.CumulativeWeek)AS Week。那个改变了吗? – 2015-04-02 19:56:38

+0

没有。该线没有改变。它没有任何问题使用周在枢轴只是在选择 – 2015-04-02 20:00:08