我当前的查询是:
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
它返回值:
我希望相同的查询返回带年份的排序月份名称!
最佳答案
为了提高查询效率,我会避免使用 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/