2016-01-20 48 views
0

我想编写一个查询,返回monthname并计算当月。MSSQL Groupby订购

SELECT DateName(month , DateAdd(month , MONTH(AE.BookingTimeStamp) , -1)) monthnames, count (BookingTimeStamp) totCount 
FROM BookingsAEItems AE WHERE BookingTimeStamp BETWEEN '1/12/2015' AND '1/12/2016' group by monthnames order by totCount 

我越来越

无效的列名称MonthNames中“。

这是一个MSSQL查询。 我在想什么!

+0

您不能按MonthNames中,因为你的表没有名为monthnames的列。你必须按'DateName(month,DateAdd(month,MONTH(AE.BookingTimeStamp),-1))'进行分组。' –

+0

感谢@zespri的信息,那么我怎样才能返回上述查询的计数与月份名称 – makdu

+1

您可以简化并使查询更具可读性,如果您将'BookingTimeStamp'传递给'DateName'函数而不调用'DateAdd'函数。即'DateName(month,AE.BookingTimeStamp)as monthnames' –

回答

0

感谢您的反馈...我得到它通过为在注释中给出的具有内查询工作

SELECT Months.monthnames, count(BookingTimeStamp) 
    FROM BookingsAEItems AE, (SELECT distinct DateName(month, DateAdd(month, MONTH(AE.BookingTimeStamp), -1)) 'monthnames' 
    FROM BookingsAEItems AE WHERE BookingTimeStamp BETWEEN '1/10/2015' AND '12/12/2016') Months 
    WHERE AE.BookingTimeStamp BETWEEN '1/10/2015' AND '12/12/2016' 
    And DateName(month, DateAdd(month, MONTH(AE.BookingTimeStamp), -1)) = Months.monthnames 
    group by Months.monthnames 
1

您不能在GROUP BY子句中的SELECT子句中使用列别名。你将不得不重复整个表达式:

SELECT DateName(month , DateAdd(month , MONTH(AE.BookingTimeStamp) , -1)) monthnames, 
     count (BookingTimeStamp) totCount 
FROM  BookingsAEItems AE 
WHERE BookingTimeStamp BETWEEN '1/12/2015' AND '1/12/2016' 
group by DateName(month , DateAdd(month , MONTH(AE.BookingTimeStamp) , -1)) 
order by totCount