我想将年份列为低于它的列和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示例数据库。
答案 0 :(得分:1)
你错过了一个聚合。
即使您只希望聚合只有一个值(在这种情况下MAX
或MIN
也可以),语法仍然需要这样做
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