我有这个SQL查询,它给出了日期范围内的订单数量,这没关系:
SELECT CardName, ItemNumber, COUNT(*) AS antal, year(date) as aarstal, SUM(Numbers) AS total, sum(case when year(date)=2012 then 1 else 0 end) as newtest
FROM tblOrders
WHERE (Publisher = 3) AND (Date > '01-01-2012 00:00:00') AND (Date < '30-09-2014 23:59:59') AND (Status = 3) and ItemNumber!=9130 and ItemNumber!=9180 and ItemNumber!=9170 and ItemNumber!=9190
GROUP BY ItemNumber, CardName, year(date)
这给了我ie
CompanyA 0 76 2012 10900 76
CompanyA 0 42 2013 6300 0
CompanyB 0 1 2012 100 1
CompanyB 0 7 2013 1100 0
CompanyC 0 1 2014 300 0
CompanyD 0 7 2014 700 0
CompanyE 0 2 2012 300 2
CompanyE 0 1 2013 200 0
据此,我可以看到,2012年,CompanyA从当年的76份订单中购买了10900台,而2013年,他们购买了6300台。出于销售原因,我们希望(或需要)此输出为
CompanyA 0 76 2012 10900 42 2013 6300
CompanyB 0 1 2012 100 7 2013 1100
CompanyC 0 1 2014 300 0 2013 0
CompanyD 0 7 2014 700 0 2013 0
CompanyE 0 2 2012 300 1 2013 200
因此,您可以看到客户的销售情况是上升还是下降。我尝试了各种各样的事情,但是我不知道是否有可能在这样的查询中每年都有数字列的SUM,以及任何建议?
PS:
sum(case when year(date)=2012 then 1 else 0 end) as newtest
仅仅是为了测试,我尝试了类似SUM(数字案例......)的东西但是没有被接受!
编辑:我刚刚在SQL Fiddle中做了一个演示,只是为了更好地理解我的问题: http://sqlfiddle.com/#!3/072a1/5
在那里,您可以看到我的客户A在2012年(2个订单)共购买了300个,2013年购买了700个(2个订单),2014年最终购买了200个(1个订单)。我发现的数据透视示例只计算了订单的数量,而不是我的数字的价值 - 有人可以编辑SQL小提琴,使其成功,然后我确信我可以学习并调整解决方案进入我的真实&#34;数据库?
/托米