【问题标题】:SQL - Only return when no rows hold a valueSQL - 仅在没有行包含值时返回
【发布时间】:2017-02-14 06:20:34
【问题描述】:

我正在寻找一种仅在 NO 行保持特定值时返回 ID 的方法

例如:

*ID* | *Date*    
1    | 01/01/2001      
1    | 02/02/2002    
1    | 03/03/2003

如果我希望 SQL 仅在没有日期等于 02/02/2002 的情况下返回 ID,我将如何编写该脚本?我已经尝试过但失败了:

select *ID* 
from (example)
where date != 02/02/2002

问题是这仍然返回 ID - 1,因为第一行和最后一行不等于 02/02/2002。我的目标是没有返回结果,因为至少有一行包含匹​​配日期。

当任何行中有匹配的日期时,我需要脚本完全跳过 ID

为清楚起见,当使用与上面相同的“选择”时,下面应该返回 ID,因为没有匹配的日期:

*ID*    |   *Date*
2       |   03/03/2003      
2       |   04/04/2004    
2       |   05/05/2005

【问题讨论】:

  • 哪个 DBMS?您需要交叉解决方案吗?

标签: mysql sql sql-server oracle date


【解决方案1】:

您需要Group ByHaving 子句

select ID 
From yourtable 
group by ID 
Having count (case when date != '02/02/2002' then 1 end) = count(*)

正如 mathguy 所说,这也有效

select ID 
From yourtable 
group by ID 
Having count(case when date = '02/02/2002' then 1 end) = 0

【讨论】:

  • 或者,更简单地说,having count(case when date = 02/02/2002 then 1 end) = 0。当然,日期不应该写成 2002 年 2 月 2 日,但这是一个单独的问题(我知道您只是按照此处的操作规程进行操作)。
  • @mathguy - true.. 作为我回答的一部分添加
  • 非常感谢,您在这里为我省了很多麻烦!
猜你喜欢
  • 2011-04-25
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2020-06-17
  • 1970-01-01
相关资源
最近更新 更多