Я хочу отсортировать месяц с января по декабрь, но вот мой случай:

Результат моего запроса

Вот мой запрос по изображению выше

SELECT  SUM(totalAmount) AS Sales, 'January' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 1
UNION
SELECT  SUM(totalAmount) AS Sales, 'February' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 2
UNION
SELECT  SUM(totalAmount) AS Sales, 'March' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 3
UNION
SELECT  SUM(totalAmount) AS Sales, 'April' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 4
UNION
SELECT  SUM(totalAmount) AS Sales, 'May' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 5
UNION
SELECT  SUM(totalAmount) AS Sales, 'June' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 6
UNION
SELECT  SUM(totalAmount) AS Sales, 'July' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 7
UNION
SELECT  SUM(totalAmount) AS Sales, 'August' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 8
UNION
SELECT  SUM(totalAmount) AS Sales, 'September' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 9
UNION
SELECT  SUM(totalAmount) AS Sales, 'October' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 10
UNION
SELECT  SUM(totalAmount) AS Sales, 'November' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 11
UNION
SELECT  SUM(totalAmount) AS Sales, 'December' AS NameMonth
FROM  sales_tbl
WHERE MONTH(transactionDate) = 12 

Я попытался включить это в запрос, чтобы решить свою проблему:

ORDER BY MONTH(NameMonth)

Но я получил сообщение об ошибке Сообщение об ошибке

Изначально NameMonth не является столбцом в таблице.

Мы очень благодарны за ответы.

-2
Roevic 27 Ноя 2021 в 07:46
Заказ по МЕСЯЦУ (transactionDate) @Roevic вместо МЕСЯЦА (NameMonth).
 – 
zambee
27 Ноя 2021 в 08:08
Остановить рассылку спама по тегам. Вы явно не используете C #, MySQL и SQL Server одновременно, и в вашем коде нет ничего о C #. MySQL и SQL Server - это две отдельные и разные СУБД. Используйте только те теги, которые действительно применимы к вашему сообщению. Спам по тегам - очень хороший способ быстро собрать голоса против и закрыть ваш вопрос.
 – 
Ken White
27 Ноя 2021 в 08:39
Извинения, я еще новичок в этом
 – 
Roevic
27 Ноя 2021 в 09:00

3 ответа

Лучший ответ

Ты можешь это сделать.

select DateName( month , DateAdd( month , datepart(Month, transactionDate) , -1 ) ) AS Sales, sum(totalAmount) As NameMonth from Mas_Transaction
group by datepart(Month, transactionDate)
order by datepart(Month, transactionDate)
0
vivek nuna 27 Ноя 2021 в 08:30
Это работает для меня! большое спасибо!
 – 
Roevic
27 Ноя 2021 в 09:01

Во-первых, используйте следующий метод, чтобы отобразить объем продаж в одной строке за месяц. После этого вы можете использовать команду Case When, чтобы получить название месяца и выполнить сортировку по идентификатору месяца (MonthID или MONTH (transactionDate)). попробуйте следовать:

select * from(
    SELECT  SUM(totalAmount) AS Sales , MONTH(transactionDate) AS MonthID
    FROM  sales_tbl
    GROUP BY MONTH(transactionDate)
) as tbl order by tbl.MonthID
0
zambee 27 Ноя 2021 в 08:48
Ваш ответ очень ценен! Я приму к сведению это.
 – 
Roevic
27 Ноя 2021 в 09:04

Следующий запрос использует CTE вместо использования подзапросов / объединений и для большей точности отсортирован по месяцу и году.

Объяснение: QUERY группирует данные с CTE и получает имя месяца с помощью встроенной функции DATENAME, а затем выполняет обычный запрос выбора и сортировку данных

WITH QUERY AS(
SELECT SUM(totalAmount) Sales,
MONTH(transactionDate) SalesMonth,
YEAR(transactionDate) SalesYear,
DATENAME(MONTH,transactionDate) NameMonth
FROM sales_tbl
GROUP BY MONTH(transactionDate),YEAR(transactionDate),DATENAME(MONTH,transactionDate) 
)
SELECT Sales,NameMonth,SalesYear
FROM QUERY
ORDER BY SalesYear,SalesMonth

Ссылки:

DATENAME

КТР

0
aAlj 27 Ноя 2021 в 09:27