2017-10-16 82 views
-2

嗨我加入一個表格,範圍爲1個月天,以獲取基於連接表(基表)的每天計數。通過範圍表加入PLSQL組正在顯示適當的計數

爲此,我使用左外連接來計算每天的計數。 在我的基表如下所示(表名REGISTRIERUNG]

enter image description here

而且我已創建一個月範圍內使用下面的查詢

SELECT TO_DATE ('01-10-2017', 'dd-mm-yyyy') + ROWNUM - 1 AS daterange 
    FROM all_objects 
WHERE ROWNUM <= 
      TO_DATE ('30-10-2017', 'dd-mm-yyyy') 
      - TO_DATE ('01-10-2017', 'dd-mm-yyyy') 
      + 1; 

enter image description here

,但我得到的計數1日期現在有記錄匹配範圍表 而不是0計數。

我正在使用下面的查詢來獲得最終結果。

SELECT TRUNC (a.daterange), COUNT (a.daterange) 
    FROM (SELECT TO_DATE ('01-10-2017', 'dd-mm-yyyy') + ROWNUM - 1 
         AS daterange 
       FROM all_objects 
       WHERE ROWNUM <= 
         TO_DATE ('30-10-2017', 'dd-mm-yyyy') 
         - TO_DATE ('01-10-2017', 'dd-mm-yyyy') 
         + 1) a 
     LEFT OUTER JOIN 
      REGISTRIERUNG b 
     ON TRUNC (a.daterange) = TRUNC (b.MODIFIKATIONZEIT) 
GROUP BY TRUNC (a.daterange) 
ORDER BY TRUNC (a.daterange) ASC; 

enter image description here

回答

0

你不應該基於該是列數行總是填充(查詢a.daterange總是被填充,因爲從你的內嵌視圖此列的所有日期在一個月內) 。相反,您應該計算外部連接到帶有生成日期的內聯視圖的表中的行數。請注意,count函數將不會考慮列modifikationzeit中具有null值的行。

例如:

select a.daterange, 
     count(b.modifikationzeit) 
    from (select to_date('01-10-2017', 'dd-mm-yyyy') + level - 1 as daterange 
      from dual 
     connect by level <= to_date('31-10-2017', 'dd-mm-yyyy') - 
          to_date('01-10-2017', 'dd-mm-yyyy') + 1) a 
    left outer join registrierung b 
    on a.daterange = trunc(b.modifikationzeit) 
group by a.daterange 
order by a.daterange; 

我已刪除不必要trunc's,並轉換從查詢到all_objects使用connect by子句之一。我還確定了十月份的日期生成 - 它有31天,而不是你的例子中的30天。

+0

Thnaks很多工作 – user432843