添加过滤器以查询删除0计数数据

时间:2015-08-13 03:12:18

标签: sql oracle oracle10g

我需要在查询中添加过滤器,但这样做会删除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;

我需要检查groundinfo.ground_status =&#39; Ground&#39;同样在这个查询中保持数据的0计数。

1 个答案:

答案 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条件的一部分,<{1}}子句中的不是