SQL查询按年份排序,每年计算值

时间:2014-10-16 09:01:31

标签: sql-server date sum

我有这个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;数据库?

/托米

0 个答案:

没有答案
相关问题