oracle中的自定义排序

奈奈

我正在尝试根据到期时间(按货币分组)对特定列“ TENOR”进行排序-例如,应按以下顺序排序:ON,SW,1M,2M,3M,6M,9M,1Y,18M, 2Y,依此类推..其中ON =隔夜,SW =一周,1M = 1个月。我尝试按情况使用顺序,但不确定我错过了什么,它总是在结果顶部提供18M。

在此处输入图片说明

在此处输入图片说明

MT0

您可以使用DECODE(或CASE)语句(并可以放置有意义的值),并且由于要获取3个字符的子字符串,因此需要包括尾随空格:

如果查询的简化版本是:

SELECT SUBSTR( name, 9, 3 ) AS tenor,
       name
FROM   table_name
ORDER BY SUBSTR( name, 1, 8 ),
         DECODE(
           tenor,
           'ON ', 1/30,
           'SW ', 7/30,
           '1M ', 1,
           '2M ', 2,
           '3M ', 3,
           '6M ', 6,
           '9M ', 9,
           '1Y ', 12,
           '18M', 18,
           '2Y ', 24,
           '3Y ', 36,
           '5Y ', 60,
           '10Y', 120,
           NULL
         ) ASC NULLS LAST

对于测试数据:

CREATE TABLE table_name ( name ) AS
SELECT 'ARZ USD 18M FX FORWARD' FROM DUAL UNION ALL
SELECT 'BRZ USD 10Y FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 1Y FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 2M FX FORWARD' FROM DUAL UNION ALL
SELECT 'BRZ USD 1M FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 6M FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 3M FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 1M FX FORWARD' FROM DUAL UNION ALL
SELECT 'ARZ USD 9M FX FORWARD' FROM DUAL UNION ALL
SELECT 'BRZ USD 1Y FX FORWARD' FROM DUAL;

输出:

天诺| 名称                  
:---- | :---------------------
1M | ARZ 100万美元外汇交易
2M | ARZ 200万美元外汇交易
3M | ARZ 300万美元外汇交易
6M | ARZ 600万美元外汇前瞻
9M | ARZ 900万美元外汇
1年| ARZ USD 1Y FX FORWARD
18M | ARZ 1800万美元外汇
1M | BRZ 100万美元外汇前瞻
1年| BRZ 1年美元外汇汇率
10年| BRZ 10年期美元外汇前瞻

db <>在这里拨弄

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章