Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle为没有数据的日期显示0_Oracle_Missing Data - Fatal编程技术网

Oracle为没有数据的日期显示0

Oracle为没有数据的日期显示0,oracle,missing-data,Oracle,Missing Data,我正在收集过去一年的每日数据。有些日期有0个订单,我想显示这一点,而不是完全忽略 我有这样一个简单的查询: SELECT DATE, COUNT(*) FROM ORDERS GROUP BY DATE ORDER BY DATE 而不是返回 Date Count 01-JAN-2016 5 03-JAN-2016 7 05-JAN-2016 3 我想得到: Date Count 01-JAN-2016 5 02-JAN-2016 0 03-JAN-

我正在收集过去一年的每日数据。有些日期有0个订单,我想显示这一点,而不是完全忽略

我有这样一个简单的查询:

SELECT DATE, COUNT(*) FROM ORDERS
GROUP BY DATE
ORDER BY DATE
而不是返回

Date         Count
01-JAN-2016  5
03-JAN-2016  7
05-JAN-2016  3
我想得到:

Date         Count
01-JAN-2016  5
02-JAN-2016  0
03-JAN-2016  7
04-JAN-2016  0
05-JAN-2016  3

如何在Oracle中实现这一点?

您需要一些其他表格,其中包含您感兴趣的所有日期;您可以使用以下内容动态构建这样的东西

设置:

您的查询:


<>这将考虑在01 / 01 / 2016和10/01/2016之间的日期,使用表中的外部连接;您可以对其进行编辑,以更好地适应您感兴趣的时间间隔。

您需要一些其他表格,其中包含您感兴趣的所有日期;您可以使用以下内容动态构建这样的东西

设置:

您的查询:


<>这将考虑在01 / 01 / 2016和10/01/2016之间的日期,使用表中的外部连接;您可以对其进行编辑,以更好地适应您感兴趣的时间间隔。

在Oracle中,对于具有分区外部联接(专门为填充稀疏数据而设计)的非平凡情况,这是最有效的

此处记录:


您的示例可能属于普通类,但在其他情况下也要注意此方法。

在Oracle中,对于具有分区外部联接(专门为填充稀疏数据而设计)的非普通情况,这是最有效的方法

此处记录:


您的示例可能属于普通类别,但在其他情况下也要注意此方法。

这是正确的,除非您需要+level-1以包含1月1日级别,而不是0。这是正确的,除非您需要+level-1以包含1月1日级别,而不是0。
SQL> CREATE TABLE test_date (date_col) AS
  2      (SELECT TO_DATE('01012016', 'ddmmyyyy') FROM DUAL UNION ALL
  3       SELECT TO_DATE('02012016', 'ddmmyyyy') FROM DUAL UNION ALL
  4       SELECT TO_DATE('02012016', 'ddmmyyyy') FROM DUAL UNION ALL
  5       SELECT TO_DATE('04012016', 'ddmmyyyy') FROM DUAL UNION ALL
  6       SELECT TO_DATE('04012016', 'ddmmyyyy') FROM DUAL UNION ALL
  7       SELECT TO_DATE('06012016', 'ddmmyyyy') FROM DUAL UNION ALL
  8       SELECT TO_DATE('06012016', 'ddmmyyyy') FROM DUAL
  9      );

Table created.
SQL> SELECT date_col2, COUNT(date_col)
  2      FROM (    SELECT TO_DATE('01012016', 'ddmmyyyy') + LEVEL -1 AS date_col2
  3                  FROM DUAL
  4            CONNECT BY TO_DATE('01012016', 'ddmmyyyy') + LEVEL -1 <= TO_DATE('10012016', 'ddmmyyyy')) dates
  5           LEFT OUTER JOIN test_date ON (date_col = date_col2)
  6  GROUP BY date_col2
  7  ORDER BY 1;

DATE_COL2 COUNT(DATE_COL)
--------- ---------------
01-GEN-16               1
02-GEN-16               2
03-GEN-16               0
04-GEN-16               2
05-GEN-16               0
06-GEN-16               2
07-GEN-16               0
08-GEN-16               0
09-GEN-16               0
10-GEN-16               0

10 rows selected.