【发布时间】:2014-05-06 21:12:15
【问题描述】:
我有以下选择:
SELECT
COALESCE (opened.ano, closed.ano) AS ano,
COALESCE (opened.mes, closed.mes) AS mes,
COALESCE (opened.cnt, 0) AS opened_cases,
COALESCE (closed.cnt, 0) AS closed_cases
FROM
(
SELECT
YEAR (OPEN_DATE) AS ano,
MONTH (OPEN_DATE) AS mes,
COUNT (*) AS cnt
FROM
TABLE1,
TABLE2
WHERE
TABLE1.USERNAME = TABLE2.USERNAME
AND TABLE2.GROUP = 'SUPPORT'
GROUP BY
YEAR (OPEN_DATE),
MONTH (OPEN_DATE)
) opened
FULL OUTER JOIN (
SELECT
YEAR (CLOSE_DATE) AS ano,
MONTH (CLOSE_DATE) AS mes,
COUNT (*) AS cnt
FROM
TABLE1,
TABLE2
WHERE
TABLE1.USERNAME = TABLE2.USERNAME
AND TABLE2.GROUP = 'SUPPORT'
GROUP BY
YEAR (CLOSE_DATE),
MONTH (CLOSE_DATE)
) closed ON opened.ano = closed.ano
AND opened.mes = closed.mes
ORDER BY
COALESCE (opened.ano, closed.ano) ASC,
COALESCE (opened.mes, closed.mes) ASC;
结果是:
情况:
第一行有空值的行丢失了,因为选择中没有空条件。
谢谢
【问题讨论】:
-
您确定应该将它们添加到该行吗?这些是没有
CLOSE_DATE的行,但重要的是,它们可能已经被计入OPEN_DATE所指的适当时期。我原以为添加它们会导致重复计算它们。 -
@Damien_The_Unbeliever,你是对的。这些行正在统计中,4 起案件中有 3 起在 4 月份开立,5 月份开立 1 起,所有 4 起案件仍然开庭。那么是否可以将选择更改为:如果 closed_date 为空,则从 opens_date 获取年份和月份并添加 1。谢谢。
-
我原以为对您的数据的正确修复只是作为
closed查询的额外过滤器,其中CLOSE_DATE不为空。您仍然在谈论在其他地方添加随机数仍然感觉不对。 -
对不起@Damien_The_Unbeliever,你还是对的。选择中的空值过滤器应该修复它。再次感谢