按分区准确排序日期名称

问题描述

我有以下数据:

with cte (id,[months]) as (
select  1,'July 2019'         union all
select  2,'July 2019'         union all
select  3,'July 2019'         union all
select  4,'July 2019'         union all
select  5,'August 2019'       union all
select  6,'August 2019'       union all
select  7,'September 2019'    union all
select  8,'October 2019'      union all
select  9,'November 2019'     union all
select  10,'December 2019'     union all
select  11,'January 2020'      union all
select  12,'January 2020'      union all
select  13,'January 2020'      union all
select  14,'January 2020'      union all
select  15,'February 2020'     union all
select  16,'March 2020'        union all
select  17,'March 2020'        union all
select  18,'April 2020'        union all
select  19,'May 2020'          union all
select  20,'June 2020'
)

我需要创建一个排序列,以对所有相同的months用相同的数字进行排名。

我使用以下代码遇到的问题是,它无法正确排序,也无法为我提供预期的结果:

select
*,dense_rank() over (partition by months order by id) Sort
from    cte

当前结果:

Incorrect Results

我的预期结果:

Expected Results

我应该如何更改脚本以实现此目的?

解决方法

经过大量的努力,我设法使用以下脚本解决了这个问题:

select
*,convert(date,'01 '+Months)                              MonthsConvertedToDate,dense_rank() over (order by convert(date,'01 '+Months)) Sort
from    cte
order by sort,id

结果:

Expected Results

参见演示here

但是我愿意提出更好的建议:-)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...