【问题标题】:PIVOT basics: Why do my aggregate return NULL?PIVOT 基础知识:为什么我的聚合返回 NULL?
【发布时间】:2010-11-16 14:46:58
【问题描述】:

我在这里有一个基本的 PIVOT 问题,可能不会给您的专家带来任何麻烦:

我得到了这个运行良好的 SQL:

SELECT order_year, SUM(amount) AS Amount 
FROM dbo.mytable
GROUP BY order_year;

这会返回类似:

2010 7000000
2007 8051222
2008 7099057
2009 13088790

现在我想使用与此 MSDN 文章中所述相同的原理来旋转表格:http://msdn.microsoft.com/en-us/library/ms177410.aspx

我试过这个:

SELECT 'Amount' AS Total_Amount_Sorted_By_Order_Year, 
[0], [1], [2], [3], [4]
FROM
(SELECT order_year, amount 
    FROM dbo.mytable ) AS SourceTable
PIVOT
(
SUM(amount)
FOR order_year IN ([0], [1], [2], [3], [4])
) AS PivotTable;

但这会返回一堆 NULL! :(

Amount NULL NULL NULL NULL NULL

我做错了什么?任何帮助表示赞赏!

谢谢!

【问题讨论】:

  • 您不应该使用实际年份值 [2010]、[2009] 而不是 [0]、[1] 等?

标签: sql windows-server-2008 pivot


【解决方案1】:

谢谢巴里。我误读了 MSDN 上的文档,并认为 [0]、[1] 等标签在枢轴列的枚举中......(!)

将它们替换为实际年份使聚合起作用!

SELECT 'Amount' AS Total_Amount_Sorted_By_Order_Year,  
[2007], [2008], [2009], [2010]
FROM 
(SELECT order_year, amount  
    FROM dbo.mytable ) AS SourceTable 
PIVOT 
( 
SUM(amount) 
FOR order_year IN ([2007], [2008], [2009], [2010]) 
) AS PivotTable; 

【讨论】:

  • 我必须尝试过 5 个不同的示例,所有示例都使用 [0]、[1] 等...我认为这是一个序数!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2018-01-05
  • 2016-12-08
  • 2019-09-03
  • 1970-01-01
  • 2014-04-16
  • 2018-05-25
相关资源
最近更新 更多