2016-02-18 141 views
0

我有这个查询,拉出月份和金额。像这样:SQL获取月份和年份的名称和月份的订单

Aug 2015 61.87 
Dec 2015 10.83 
Feb 2015 80.00 
Jul 2015 56.19 
Jun 2015 31.65 
Mar 2015 59.02 
May 2015 46.91 
Nov 2015 6.00 
Oct 2015 8.27 
Sep 2015 15.73 

正如你所看到的顺序是不正确的。这里是我的查询

select 
    CONVERT(CHAR(4), InvoiceDate, 100) + CONVERT(CHAR(4), InvoiceDate, 120) as Month, 
    CONVERT(decimal(18,2), round(SUM(amount),2)) as Amount 
from DataInvoice 
where Vendor='IceCreamTruck' 
    and AccountNumber = '54554' 
    and InvoiceDate >= '02/01/2015' 
    and InvoiceDate <= '01/31/2016' 
group by MONTH(InvoiceDate), 
    CONVERT(CHAR(4), InvoiceDate, 100) + CONVERT(CHAR(4), InvoiceDate, 120) 

我试图Year()Month()做订单,但没有奏效。它在ORDER BY子句中抱怨无效,因为它不包含在聚合函数或GROUP BY子句中。

对此有何想法?顺便说一下发票是在这个犯人YYYY-MM-DD

谢谢。

+0

因此,InvoiceData作为字符串存储在数据库中? – Dave

+1

为什么在SQL中你会这么做?你为什么不用你的编程语言来进行格式化/转换? –

+0

也许发布您的表模式... – Dave

回答

2

您应该添加一个ORDER BY条款:

ORDER BY RIGHT(CONVERT(CHAR(4), InvoiceDate, 100) + CONVERT(CHAR(4), InvoiceDate, 120),4) 
     MONTH(InvoiceDate) 

这实质上订单逐年结果,然后按月份数,所以应该给你正确的顺序。

+0

当我这样做时,我得到ORDERBY子句中的无效,因为它不包含在聚合函数或GROUPBY子句错误中 –

+0

@ civic.sir检查编辑我做了。 –

+0

啊,这就像一个魅力!非常感谢@Giorgos Betsos –