sql - 在 SQL 查询中对月份名称进行排序

标签 sql sql-server sorting tsql

我当前的查询是:

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

我希望相同的查询返回带年份的排序月份名称!

最佳答案

为了提高查询效率,我会避免使用 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)

这具有定位相关年份和月份的第一天的效果,从而为 order by 子句留下一个完整的日期,但仍然分组到所需的级别。运行 foillowing 可能有助于解释

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     

关于sql - 在 SQL 查询中对月份名称进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52639680/

相关文章:

sql - 当日期存储很长时,如何按天分组?

sql - 强制 SQL Remote 查询进行远程过滤而不是本地过滤

sql - 根据另一个数据库的查询结果查询一个数据库

c - 在C中按字母顺序对链表进行排序

javascript - 无法对数组进行排序

javascript - 使用带有 Underscore.js 的 Javascript 以另一种方式排序

sql - 获取原因 (ORA-8102 "index key not found")

php - 查询破坏代码时崩溃

sql - MS SQL Server 中的批量增量序列

mysql - 如何按日期选择登录总数?