首页 > 解决方案 > 根据计算值对列进行排序

问题描述

我在一列中有以下值

    Q1 2018
    Q2 2018
    Q3 2018
    Q4 2018
    feb 2018
    mar 2018
    Q1 2019
    Q2 2019
    Q3 2019
    jan 2018
    sep 2018
    dec 2018
    jan 2019
    feb 2019
    mar 2019

我有上面的值,这些值是根据一些参数计算的。对于某些数据,该值带有月份,对于某些数据,该值带有季度。

当所有值都在同一列上时,有什么方法可以使用 order by 对它们进行排序,这意味着每月值和季度值都应该排序。

输出应该像

Q1 2018
Q2 2018
Q3 2018
Q4 2018
Q1 2019
Q2 2019
Q3 2019
jan 2018
feb 2018
mar 2018
sep 2018
dec 2018
jan 2019
feb 2019
mar 2019

标签: sqldatabaseoracle

解决方案


我认为这可以满足您的要求:

order by len(col),         -- put the quarters first
         substr(col, 4),   -- order by year
         (case when col not like 'Q%'
               then to_date(col, 'MON YYYY') 
          end),            -- order months by date
         col               -- order quarters by quarter

推荐阅读