枢轴查询不起作用

时间:2011-09-03 07:08:00

标签: sql-server-2008

我想将年份列为低于它的列和salesamount。

此查询显示OrderYear,然后显示小计:

Select YEAR(OrderDate) As OrderYear, SUM(SubTotal) as OrderTotal
    From Sales.SalesOrderHeader s
        Group by YEAR(OrderDate)    

所以我必须为它编写一个数据透视查询。这是我的透视查询无效:

Select [2001] , [2002], [2003], [2004]
From
(
    Select YEAR(OrderDate) As OrderYear, SUM(SubTotal) as OrderTotal
    From Sales.SalesOrderHeader s
        Group by YEAR(OrderDate)    
) a
Pivot(
    OrderTotal FOR OrderYear In ([2001] , [2002], [2003], [2004])
) pvt

有人能发现错误吗?我正在使用AdventureWorks示例数据库。

1 个答案:

答案 0 :(得分:1)

你错过了一个聚合。

即使您只希望聚合只有一个值(在这种情况下MAXMIN也可以),语法仍然需要这样做

MAX(OrderTotal) FOR OrderYear In ([2001] , [2002], [2003], [2004])

虽然实际上在你的情况下你不需要内部聚合并且可以使用

Select [2001] , [2002], [2003], [2004]
From
(
    Select YEAR(OrderDate) As OrderYear, SubTotal
    From Sales.SalesOrderHeader s  
) a
Pivot(
    SUM(SubTotal) FOR OrderYear In ([2001] , [2002], [2003], [2004])
) pvt