2015-08-13 126 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条款。