如果存在,SQL Server返回Null

时间:2015-08-18 16:23:23

标签: sql sql-server

在SQL Server 2008中,我希望创建一个在聚合中返回NULL的查询(如果存在),否则我会查找最大值。这是一个简化的例子......

我有以下数据:

    CO  Loc Term_Dt
    1   A   7/15/2013
    1   B
    1   C   10/30/2000
    2   A   8/10/2008
    2   B   6/1/2015
    2   C   4/30/2010

我要找的结果是:

    CO  Term_Dt
    1   NULL
    2   6/1/2015

因为从技术上讲,如果至少有一个地点尚未终止,公司仍然开放。

由于

2 个答案:

答案 0 :(得分:5)

只需使用聚合和case语句:

select co,
       (case when count(term_dt) = count(*) then max(term_dt)
        end) as term_dt
from table t
group by co;

count(<column>)计算非NULL值的数量。如果这与所有行不匹配,则至少有一行为NULLelse不需要case,因为默认值为NULL

答案 1 :(得分:1)

生成具有空术语日期的公司的子数据集,并将您的超级集合加入其中。第二个表中的任何非空的记录都要显示为null,因此请使用case语句。

这是有效的,因为我们的外表(A)返回

CO TERM_DT  
1  7/15/2013
2  6/1/2015  

但是我们的LEFT加入我们的内联视图也增加了B.Co ......

CO TERM_DT   B.CO
1  7/15/2013 1
2  6/1/2015  NULL

所以你可以看到,当B.CO不为null而不是max(TERM_DT)时,我们想要显示NULL将产生所需的结果。这是使用案例陈述完成的。

SELECT A.Co, 
    Case when B.CO is not null then Max(A.Term_DT) else NULL end as Term_DT
FROM tableName A
LEFT JOIN (SELECT Distinct CO from tableName where Term_dt is null) B
 on A.Co = B.CO
GROUP BY CO