数据透视表和分组依据
Posted
技术标签:
【中文标题】数据透视表和分组依据【英文标题】:Pivot table & Group by 【发布时间】:2019-05-20 13:24:02 【问题描述】:我正在使用此查询来获取前 12 个月的销售额。
SELECT *
FROM (SELECT
gp_etablissement [ETABLISSEMENT],
datename(month, dateadd(m,-1,getdate())) [Month],
COUNT(1) [Sales Count]
FROM PIECE
GROUP BY gp_etablissement,
datename(month, dateadd(m,-1,getdate()))) AS MontlySalesData
PIVOT( SUM([Sales Count])
FOR Month IN ([January],[February],[March],[April],[May],
[June],[July],[August],[September],[October],[November],
[December])) AS MNamePivot
我收到了这个错误:
每个 GROUP BY 表达式必须至少包含一列 外部参考。
我已经更改了 group by 中的许多列,但同样的问题。
【问题讨论】:
您的查询没有意义。您为什么按当前月份分组,然后期望取消该值。根据当前月份,您只会得到一列的值。 我想获得过去 12 个月的值,我想用他的名字重命名每一列(月)。例如:[Month - 1] 必须:4 月。 这就是样本数据和所需结果很有帮助的原因。 【参考方案1】:使用以下代码消除错误。当 group by 使用日期部分时,枢轴不适用于子查询。
;WITH CTE
AS
(
SELECT
gp_etablissement [ETABLISSEMENT],
datename(month, dateadd(m,-1,getdate())) [Month],
COUNT(1) [Sales Count]
FROM PIECE
GROUP BY gp_etablissement,
datename(month, dateadd(m,-1,getdate()))
)
SELECT *
FROM CTE
PIVOT( SUM([Sales Count])
FOR Month IN ([January],[February],[March],[April],[May],
[June],[July],[August],[September],[October],[November],
[December])) AS MNamePivot
【讨论】:
以上是关于数据透视表和分组依据的主要内容,如果未能解决你的问题,请参考以下文章