繁体   English   中英

在ORACLE中按月和年排序,总和

[英]Order By month and year in ORACLE with sum

我有一个存储过程,而select语句是:

  SELECT COUNT(IDENTIFIER) AS      TOTALORDER,SUM(FT.ACTUALORDER01+FT.ACTUALORDER02+FT.ACTUALORDER03+FT.ACTUALOR      DER04) AS TOTALORDER,
  SUM(TOTALPENDING) AS PENDING,
  TO_CHAR(TO_DATE(DATE),'MonthYYYY') AS "Month-Year"
                                                            FROM FTORDER      FT FULL JOIN FSDPENDING FS
                                                            ON      FS.IDENTIFIER=FT.ORDERNUMBER
                                                            AND     FT.ORDERDATE=FS.ORDERDATETIME
                                                            AND FT.ORDREcode=FS.ORDERcode
                                                            AND FT.sequence=FS.sequence
                                                            AND FT.recordstatus=FS.recordstatus
              WHERE TRUNC(FORDERDATETIME) BETWEEN TO_DATE('01-JAN-2014','dd/mon/yyyy') AND TO_DATE('31-DEC-2015','dd/mon/yyyy')
                                                            AND TORDERNUMBER NOT LIKE ('-%') 
    GROUP BY TO_CHAR(TO_DATE(DATE),'MonthYYYY')
    ORDER BY "Month-Year"
 ;

这显示了每个月的总和,但是我需要按月和年对结果进行排序,因为结果如下所示:

April 2013 
February 2013 
January 2013 
June 2013 
March 2013 
May 2013 

在这种情况下有什么解决方案?

将您的to_date的格式更改为(YYYY-MM),然后以此顺序(DESC或ASC)进行排序,以按照您想要的顺序进行获取。 目前,它是根据月份名称按字母顺序排序的。

TO_CHAR(TO_DATE(DATE),“月YYYY”)

有几件事不正确。

切勿在DATE列上应用TO_DATE 它迫使Oracle:

  • 首先将其转换为字符串
  • 然后将其转换回日期

基于特定语言环境的NLS设置 您需要TO_DATE将文字转换为日期。 对于date-arithmetic ,请保留原样的日期。

您当前正在对字符串进行排序,因为TO_CHAR将日期转换为字符串。

您可以这样做:

SQL> alter session set nls_date_format = 'YYYY-MON-DD';

Session altered.

SQL> SELECT TRUNC(hiredate,'MONTH')
  2  FROM emp
  3  GROUP BY TRUNC(hiredate,'MONTH')
  4  ORDER BY TRUNC(hiredate,'MONTH');

TRUNC(HIRED
-----------
1980-DEC-01
1981-FEB-01
1981-APR-01
1981-MAY-01
1981-JUN-01
1981-SEP-01
1981-NOV-01
1981-DEC-01
1982-JAN-01
1982-DEC-01
1983-JAN-01

11 rows selected.

注意:alter session语句仅以所需格式显示日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM