Sql server 透视表日期和年份数据显示sql server 2005

Sql server 透视表日期和年份数据显示sql server 2005,sql-server,pivot,Sql Server,Pivot,这是我的问题 SELECT * FROM (SELECT CurDate, YEAR(CurDate) AS orderyear, Warranty_Info FROM eod_main where year(CurDate)>=2009 and year(CurDate)<=2011) AS D PIVOT(SUM(Warranty_Info) FOR orderyear IN([2009],[2010],[2011])) AS P 我的查询中存在某种问题,这就是

这是我的问题

SELECT *
FROM (SELECT CurDate, YEAR(CurDate) AS orderyear, Warranty_Info
      FROM eod_main where year(CurDate)>=2009 and year(CurDate)<=2011) AS D
  PIVOT(SUM(Warranty_Info) FOR orderyear IN([2009],[2010],[2011])) AS P
我的查询中存在某种问题,这就是为什么它返回同一个月的多个数据,如

请帮我找到正确的问题。谢谢

我建议使用函数返回每个月的数值,而不是使用CurDate作为年、月和日的完整日期。这将允许您按月分组,而不是按完整日期分组:

SELECT dateMonth, [2009],[2010],[2011]
FROM 
(
  SELECT month(CurDate) dateMonth, 
    YEAR(CurDate) AS orderyear, Warranty_Info
  FROM eod_main 
  where year(CurDate)>=2009 
    and year(CurDate)<=2011
) AS D
PIVOT
(
  SUM(Warranty_Info) 
  FOR orderyear IN([2009],[2010],[2011])
) AS P;

SELECT dateMonth, [2009],[2010],[2011]
FROM 
(
  SELECT month(CurDate) dateMonth, 
    YEAR(CurDate) AS orderyear, Warranty_Info
  FROM eod_main 
  where year(CurDate)>=2009 
    and year(CurDate)<=2011
) AS D
PIVOT
(
  SUM(Warranty_Info) 
  FOR orderyear IN([2009],[2010],[2011])
) AS P;