数据透视表和分组依据

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

【讨论】:

以上是关于数据透视表和分组依据的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 的数据透视表或分组依据?

Pandas 数据透视表和分组按月和小时

SQL Server 数据透视 + 总和 + 分组依据

数据分析处理——透析表和交叉表

“常规”数据透视表和 olap 类型数据透视表之间的区别

具有多索引的 Pandas 子数据透视表和总数据透视表