Сортировать имя месяца в SQL-запросе - PullRequest
0 голосов
/ 04 октября 2018

Мой текущий запрос:

SELECT FORMAT(Date, 'MMM') as 'Date', FORMAT(Date, 'yyy') as 'Year' 
,COUNT(*) 
as 'Tickets Generated'
FROM [SambaData2].[dbo].[Tickets]
GROUP BY FORMAT(Date, 'MMM'), FORMAT(Date, 'yyy')
ORDER BY Date

Возвращает значения:

enter image description here

Я бы хотел, чтобы тот же запрос былвернуть отсортированное название месяца с указанием года!

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вот еще один вариант:

SELECT
    FORMAT(Date, 'yyy') AS Year,
    FORMAT(Date, 'MMM') AS Date,
    COUNT(*) AS [Tickets Generated]
FROM [SambaData2].[dbo].[Tickets]
GROUP BY
    FORMAT(Date, 'yyy'),
    FORMAT(Date, 'MMM')
ORDER BY
    TRY_CONVERT(datetime, FORMAT(Date, 'yyy') + '-' + FORMAT(Date, 'MMM'));

Я предпочитаю этот метод, а не принятый ответ, потому что он использует только те компоненты в предложении ORDER BY, которые фактически присутствовали в предложении SELECT.Некоторые СУБД будут жаловаться на ORDER BY с использованием компонентов, отсутствующих в SELECT.Этот ответ также предполагает, что ваша версия SQL Server поддерживает TRY_CONVERT.

0 голосов
/ 04 октября 2018

Для большей эффективности запросов я бы избежал подхода format ().

select
       left(datename(month,[Date]),3) [Month]
     , year([Date]) [Year]
     , [Tickets Generated]
from (
        SELECT
               dateadd(month,datediff(month,0,t.[Date]),0) as [Date]
             , COUNT(*) as [Tickets Generated]
        FROM [SambaData2].[dbo].[Tickets] AS t
        GROUP BY dateadd(month,datediff(month,0,t.[Date]),0)
    ) as d
ORDER BY [Date]

Суть этого подхода заключается в следующем:

dateadd(month,datediff(month,0,t.[Date]),0)

это приводит к определению первого дня соответствующего года и месяца, таким образом, оставляя всю дату доступной дляпорядок по пункту, но все еще группируется до необходимого уровня.Выполнение следующих действий может помочь объяснить

select 
  datediff(month,0,getdate()) a
, dateadd(month,datediff(month,0,getdate()),0) b
, left(datename(month,getdate()),3) c
, getdate() d


   a          b        c              d           
 ------- ------------ ----- --------------------- 
  1425    2018-10-01   Oct   2018-10-04 08:08:19     
0 голосов
/ 04 октября 2018

Использование года (даты), месяца (даты) в порядке по месяцам () даст вам номер месяца, чтобы вы могли легко заказать его

SELECT FORMAT(Date, 'MMM') as 'Date', FORMAT(Date, 'yyy') as 'Year',
COUNT(*) 
as 'Tickets Generated'
FROM [SambaData2].[dbo].[Tickets]
GROUP BY FORMAT(Date, 'MMM'), FORMAT(Date, 'yyy'),year(Date),month(Date)
ORDER BY year(Date),month(Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...