2016-05-31 17 views
1

ich täglich Daten für das vergangene Jahr bin ziehen. Einige Daten waren 0 Aufträge und ich möchte dies eher zeigen, als auslassen vollständigOracle Show 0 für Daten ohne Daten

Ich habe eine einfache Abfrage wie folgt:

SELECT DATE, COUNT(*) FROM ORDERS 
GROUP BY DATE 
ORDER BY DATE 

Aber anstatt

Date   Count 
01-JAN-2016 5 
03-JAN-2016 7 
05-JAN-2016 3 

zurückkehren Ich möchte bekommen :

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

Wie kann dies in Oracle erreicht werden?

Antwort

3

Sie benötigen eine andere Tabelle, die alle Termine aus, die Sie interessiert sind; Sie können so etwas im laufenden Betrieb mit etwas wie dem Folgenden bauen.

Setup:

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. 

Ihre Suche:

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. 

Dies wird prüfen, Termine zwischen 2016.01.01 und 2016.10.01, mit dem Tisch in Outer-Joins ; Sie können es besser bearbeiten, um das Intervall Sie interessiert sind fit.

+0

Das ist richtig, es sei denn Sie + Ebene benötigen -1 1. Januar bis umfassen (Level beginnt bei 1, nicht bei 0). – mathguy

+0

@mathguy: Du hast Recht, mein Fehler. Vielen Dank – Aleksej