仅选择具有相同引用的多行中已填充值的记录

时间:2014-05-21 16:53:26

标签: sql

我害怕另一个新手问题。 我有一个如下数据集:

Ref     Expiry
A123456 |   21/05/2014
A123456 |   
A123456 |   
A123456 |   21/05/2014
A123456 |   
B125962 |   21/05/2014
B125962 |   21/05/2014
B125962 |   21/05/2014
B125962 |   21/05/2014
B125962 |   21/05/2014
B125962 |   21/05/2014
B125962 |   21/05/2014
C236772 |   
C236772 |   21/05/2014
C236772 |   
C236772 |   
C236772 |   

我想只选择所有行上过期的记录。因此查询应该只返回上面数据集中的B125962。

我尝试了以下内容:

SELECT *
FROM MyTable T
WHERE EXISTS (SELECT 1 FROM MyTable
          WHERE Expiry <> ''
          AND Ref = T.Ref)
AND NOT EXISTS (SELECT 1 FROM MyTable
           WHERE Expiry <> ''
           AND Ref = T.Ref)

使用上述内容时,我一直没有得到任何结果。

谢谢!

3 个答案:

答案 0 :(得分:0)

SELECT Ref     
FROM MyTale 
group by Rref
having sum(case when Expiry is null then 1 else 0 end) = 0

如果您按Ref列进行分组,则可以计算每个组的Expiry列为空的次数。只选择此计数为0

的那些

答案 1 :(得分:0)

您想要返回所有出现的B125962记录吗?如果是这样,这应该有效:

SELECT *
FROM MyTable T
WHERE NOT Ref IN(SELECT Ref FROM MyTable WHERE Expiry = '')

答案 2 :(得分:0)

请尝试以下操作,如果行已过期,则认为expity列只有值,我的意思是我的assumptopm是该列不会有将来的到期日期值。

SELECT Ref, Expiry FROM MyTable WHERE Ref NOT IN(SELECT Ref FROM MyTable WHERE ISNULL(Expiry,'') = '')
相关问题