【发布时间】:2023-03-15 02:20:01
【问题描述】:
我看到使用GROUP BY 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
我尝试将 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.
【问题讨论】:
-
最简单的方法是使用
UNION。 -
@jbarker2160 你能举个例子吗?
-
This 是一个很好的资源。
-
@jbarker2160 我知道如何使用 SQL 联合 - 我将如何使用它为我的查询生成总行?
-
@BigPimpin 好的,现在您需要将
select *中的列放在聚合函数或分组中 - 请参阅 msdn 文档 - technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx
标签: sql-server-2008 pivot cube