2015-08-13 84 views
0

我需要將過濾器添加到我的查詢中,但是這樣做時會刪除0計數的數據。請協助。向查詢添加過濾器會刪除0計數數據

SELECT tble.dte, 
    COUNT(DISTINCT VIN) AS cmt 
FROM ATL_GROUNDING_REPORT groundinginfo 
RIGHT JOIN 
    (SELECT TRUNC(TO_DATE('2015/03/09 04:00:00 A.M.', 'YYYY/MM/DD hh:mi:ss A.M.') - 1 + ROWNUM) dte 
    FROM DUAL 
    CONNECT BY ROWNUM                  < 366 
    AND TRUNC(TO_DATE('2015/03/09 04:00:00 A.M.','YYYY/MM/DD hh:mi:ss A.M.') - 1 + ROWNUM) <= TRUNC(TO_DATE('2015/03/09 03:59:59 P.M.', 'YYYY/MM/DD hh:mi:ss P.M.')) 
) tble 
ON tble.dte = TRUNC(New_Time(groundinginfo.DATE_TURNED_IN,'GMT', 'EST')) 
GROUP BY tble.dte 
ORDER BY tble.dte DESC; 

我需要檢查,其中groundinginfo.ground_status =「勤」也是在此查詢保存數據以0計數,因爲它是條件。

+0

請發佈創建和插入語句以及您想要的輸出。 –

+0

我有2個表格專門庫存和grounding_info。每個庫存可以有多個接地信息或沒有。表結構如下。 庫存 --------- Inventory_id Grounding_info -------------- Info_id Inventory_id Grounding_date 我想接地庫存的數量在給定日期範圍之間的每個日期。如果沒有庫存停留在日期上,則該日期應顯示爲0。 – Ann

+0

編輯您的問題並添加創建和插入語句。我們沒有您的表格和數據來幫助您。 –

回答

1

如果添加過濾器:

where groundinginfo.ground_status='Ground' 

...那麼你是不小心打開外連接到內連接。這是怎麼回事,如果你換表以更簡單,使它成爲一個左外連接:

SELECT tble.dte, 
    COUNT(DISTINCT groundinginfo.VIN) AS cmt 
FROM (
    SELECT TRUNC(TO_DATE('2015/03/09 04:00:00 A.M.', 'YYYY/MM/DD hh:mi:ss A.M.') - 1 + ROWNUM) dte 
    FROM DUAL 
    CONNECT BY ROWNUM < 366 
    AND TRUNC(TO_DATE('2015/03/09 04:00:00 A.M.','YYYY/MM/DD hh:mi:ss A.M.') - 1 + ROWNUM) 
    <= TRUNC(TO_DATE('2015/03/09 03:59:59 P.M.', 'YYYY/MM/DD hh:mi:ss P.M.')) 
) tble 
LEFT JOIN ATL_GROUNDING_REPORT groundinginfo 
ON TRUNC(New_Time(groundinginfo.DATE_TURNED_IN,'GMT', 'EST')) = tble.dte 
AND groundinginfo.ground_status='Ground' 
GROUP BY tble.dte 
ORDER BY tble.dte DESC; 

注意,ground_status過濾器是ON連接條件的一部分,而不是一個WHERE條款。