2016-01-20 50 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