【问题标题】:SQL Server 2008: how can I sort Month column by fiscal yearSQL Server 2008:如何按财政年度对月份列进行排序
【发布时间】:2016-06-03 18:33:38
【问题描述】:

谁能帮我按财政年度对以下脚本的“月”列进行排序?例如,对于 2016 财年,“07/15”应该排在第一位,“06/16”排在最后。谢谢!

SELECT 
    RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 5) AS "MONTH", 
    Count(facility_id) COUNT 
FROM   
    facility 
WHERE  
    closed_dt BETWEEN @FromDate AND @EndDate 
GROUP BY 
    facility_status, RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 5) 
HAVING 
    facility_status IN ( 'CLOSED' ) 

【问题讨论】:

  • 您的查询中甚至没有 order by。除非您提供一些详细信息,否则我们在这里无法提供太多帮助。这可能会有所帮助。 spaghettidba.com/2015/04/24/…
  • 在末尾加上ORDER BY closed_dt

标签: sql sql-server


【解决方案1】:

另一种选择是添加另一列

SELECT RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 5) AS [MONTH]
      ,Count(facility_id) as [COUNT]
      ,max(closed_dt) as SortCol
FROM   @facility 
WHERE  closed_dt BETWEEN @FromDate AND @EndDate 
GROUP  BY facility_status
         ,RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 5) 
HAVING facility_status IN ( 'CLOSED' ) 
Order by SortCol

【讨论】:

    【解决方案2】:

    您在转换中使用了“dd/mm/yy”样式。您只需要将最后两个字符转换为 int 即可进行排序:

    ORDER BY  CAST(RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 2) as int),
    RIGHT(CONVERT(VARCHAR(8), closed_dt, 3), 5)
    

    这将首先按年份排序,然后是你的 mos/yr ...有点草率,但应该可以解决问题。

    【讨论】:

    • 感谢您的回复。但是,我收到一条错误消息“Closed_Dt”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 2015-07-01
    • 1970-01-01
    • 2022-01-22
    • 2020-07-20
    • 1970-01-01
    • 2013-02-12
    • 2020-07-23
    相关资源
    最近更新 更多