按月统计订单数量报表SQL语句(CASE 和DECODE的使用)
本文主要是使用CASE 和DECODE实现按月统计订单数量,通过此示例希望能帮助读者理解CASE和DECODE在ORCALE中的使用。
1.使用CASE实现:
按 Ctrl+C 复制代码 按 Ctrl+C 复制代码这是一条按月统计每个OPERATING_WAREHOUSE_CODE订单数量的SQL语句,统计2012年一到三月份每个OPERATING_WAREHOUSE_CODE的订单数量。
本文主要介绍下CASE WHEN THEN ELSE END AS的使用。
文中:
CASE WHEN TO_CHAR(M.ORDER_CREATION_DTE,"mm") = "01" THEN "1" ELSE "0" END AS M1
这段SQL主要是把表OMS_ORDER_HEAD中订单创建时间为一月份的标记为”1”,并且这段代码增加了一列M1,同样M2和M3分别对应二月份和三月份,根据订单创建的时间其对应的月份M1,M2,M3列的值会被标记为1。

SELECT OPERATING_WAREHOUSE_CODE, CASE WHEN TO_CHAR(M.ORDER_CREATION_DTE,"mm") = "01" THEN "1" ELSE "0" END AS M1, CASE WHEN TO_CHAR(M.ORDER_CREATION_DTE,"mm") = "02" THEN "1" ELSE "0" END AS M2, CASE WHEN TO_CHAR(M.ORDER_CREATION_DTE,"mm") = "03" THEN "1" ELSE "0" END AS M3 FROM OMS_ORDER_HEAD M WHERE M.ORDER_CREATION_DTE > TO_DATE("2012-1-1","YYYY-MM-DD") AND M.ORDER_CREATION_DTE < TO_DATE("2012-4-1","YYYY-MM-DD")

其中这段SQL执行的结果如图:
然后在此基础上再对M1(一月),M2(二月),M3(三月)对应的订单数量用SUM进行统计。
整条SQL语句的执行结果入下图:
整条SQL语句用CASE WHEN THEN ELSE END AS结合SUM很好的统计出2012年前三个月每个OPERATING_WAREHOUSE_CODE的订单数量。
2.使用DECODE实现
当然我们同样可以通过使用ORACLE中的DECODE来实现同样的功能,DECODE的实现代码:

select OPERATING_WAREHOUSE_CODE,SUM(DECODE(TO_CHAR(OH.Order_Creation_Dte,"mm"),01,1,0)) as M1, SUM(DECODE(TO_CHAR(OH.ORDER_CREATION_DTE,"mm"),02,1,0)) AS M2, SUM(DECODE(TO_CHAR(OH.ORDER_CREATION_DTE,"mm"),03,1,0)) AS M3 from OMS_ORDER_HEAD OH WHERE OH.ORDER_CREATION_DTE>TO_DATE("2012-1-1","YYYY-MM-DD") AND OH.ORDER_CREATION_DTE < TO_DATE("2012-4-1","YYYY-MM-DD") GROUP BY OPERATING_WAREHOUSE_CODE ORDER BY OPERATING_WAREHOUSE_CODE

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: mysql查询当前时间,一天内,一周,一个月内的sql语句
- 下一篇: sql语句按月统计合计概率