-3

我需要按我们公司的会计日历对月份进行排序。截至目前我只能按字母顺序排序,四月八月,十二月,二月。我需要它来排序十月到九月

Fiscal Year Month Name COUNT(DISTINCT CTL_NO) 
2019        April                         437 
2019        December                      707 
2019        February                      600 
2019        January                       730 
2019        March                         542 
2019        November                      745 
2019        October                       955 
2018        April                         600 
2018        August                        902 
2018        December                      728 
2018        February                      593 
2018        January                       745 
2018        July                          812 
2018        June                          704 
2018        March                         671 
2018        May                           589 
2018        November                      590 
2018        October                       769 
2018        September                     810
4

1 回答 1

1

一种方法是使用 CASE 表达式来设置排序键。因为您的表似乎将月份存储为字符串,所以我们需要将它们转换为 DATE。一旦我们有了 DATE 数据类型,我们就可以提取月份数,我们可以用它来排序

SELECT Fiscal_Year, Month_Name, COUNT(DISTINCT CTL_NO) 
  FROM SOME_TABLE t
 group by Fiscal_Year, Month_Name
  ORDER BY Fiscal_year
           , CASE TRIM(TO_CHAR(to_date(Month_Name,'Month'), 'MM'))
              WHEN '10' THEN -2
              WHEN '11' THEN -1
              WHEN '12' THEN 0
              ELSE TO_NUMBER(TO_CHAR(to_date(Month_Name,'Month'), 'MM'))
            END

这对于一次性使用(例如学校作业)来说很好,但它不是很健壮,每次需要时都必须重复。

一个更好的方法是有一个财政日历表,它告诉你每年的每个日历日是什么财政年度、财政月、财政周等。每年只有 365/366 行,所以开销并不大。此类表格通常在“现在”之前几年填充,过去几年的数据基本上永远保留,以便可以查找过去的日期并轻松确定相关的会计日期。

祝你好运。

于 2019-04-24T02:13:02.400 回答