2009-10-28 57 views
1

我有一个返回值设置类似下面的一个结果查询:消除空值的组从结果集

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行,因为至少有一个来自同一Quarter的Count不是NULL。

如何来自上述结果设定为这一个:

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

感谢。

+0

是第1-3行,意味着2009年第一季度? – Mikeb 2009-10-28 17:19:33

+0

对不起,只是修好了。 – twh 2009-10-28 17:20:04

+0

如果您向我展示您的查询,我会尽力帮助您调整您的查询。 – 2009-10-28 17:20:14

回答

2
SELECT 
    Quarter, Count 
FROM 
    MyTable M 
WHERE 
    EXISTS (SELECT * 
     FROM MyTable m2 
     WHERE m2.Count IS NOT NULL AND m.Quarter = m2.Quarter) 
+0

它的工作原理,谢谢。 – twh 2009-10-29 17:53:43

2
SELECT * 
FROM mytable mo 
WHERE EXISTS 
     (
     SELECT NULL 
     FROM mytable mi 
     WHERE mi.quarter = mo.quarter 
       AND mi.count IS NOT NULL 
     ) 
1

您可以利用的事实,聚合函数忽略空和做类似:

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 - 它可能不是。