sql - 根据计算值对列进行排序
问题描述
我在一列中有以下值
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
解决方案
我认为这可以满足您的要求:
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
推荐阅读
- python - Altair条形图具有可变宽度的条形?
- android - 如何在谷歌地图上显示单个地址的子地址点
- indexing - 调查慢查询和索引
- php - WordPress 中 file_get_contents 函数的替代
- sql - PostgreSQL 索引表性能突然下降
- linux - 有没有办法通过 redis-cli 设置日志文件但不编辑 redis.config 文件?
- android - 拆分安装 API 不可用。安装动态功能 Android Studio 时出现错误代码 - 5
- teradata - 如何仅更新 Teradata 日期列中的年份
- db2 - 设置 DB2 和 IBM Data Studio 的无尽麻烦
- javascript - 选择选项无法使用 codeigniter 在数据库中提交