首页 > 解决方案 > 数据透视表和分组依据

问题描述

我正在使用此查询来获取前 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 中的许多列,但同样的问题。

标签: sqlsql-servertsqlpivot

解决方案


使用以下代码消除错误。当 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

推荐阅读