Исключить группу NULL из набора результатов - PullRequest
1 голос
/ 28 октября 2009

У меня есть запрос, который возвращает набор результатов, аналогичный приведенному ниже:

   Quarter  | Count
   -------  | -----
1   Q2 2009 | NULL
2   Q2 2009 | NULL
3   Q2 2009 | NULL
4   Q3 2009 | 26
5   Q3 2009 | 27
6   Q3 2009 | NULL

Мне не нужны строки 1-3, потому что их объединенный счет четверти равен NULL. Но я хочу строки 3-6, потому что хотя бы один счетчик из того же квартала не равен NULL.

Как мне перейти от приведенного выше результата к этому:

   Quarter  | Count
   -------  | -----
1   Q3 2009 | 26
2   Q3 2009 | 27
3   Q3 2009 | NULL

Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 октября 2009
SELECT
    Quarter, Count
FROM
    MyTable M
WHERE
    EXISTS (SELECT *
        FROM MyTable m2
        WHERE m2.Count IS NOT NULL AND m.Quarter = m2.Quarter)
2 голосов
/ 28 октября 2009
SELECT  *
FROM    mytable mo
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    mytable mi
        WHERE   mi.quarter = mo.quarter
                AND mi.count IS NOT NULL
        )
1 голос
/ 28 октября 2009

Вы можете воспользоваться тем, что агрегатные функции игнорируют нуль и делают что-то вроде:

SELECT * FROM myTable m1 inner join 
(
SELECT quarter as q2 from myTable 
GROUP BY quarter
HAVING sum(count) is not null
) as m2 on m1.quarter = m2.q2

У которого может быть лучший план выполнения, чем у EXISTS - может и нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...