【问题标题】:Case when then in where clause在 where 子句中的情况下
【发布时间】:2020-01-10 15:00:48
【问题描述】:

如果满足其中一个条件,如何在where子句中使用case when then?我需要的是如果满足第一个条件后只有一个条件要执行如果一个条件满足以下条件,它不会被执行。case 语句将在第一个条件满足时停止进一步评估

SELECT TOP 100 ProjType, projCost, InvestAmount, ProjBuildSize
FROM dbo.Project 
WHERE
   (
     CASE
     WHEN projCost > 0  then projCost end >= 10000000 
     WHEN InvestAmount IS NOT NULL then InvestAmount end >= 12000000
     WHEN ProjBuildSize > 0 then ProjBuildSize ELSE >= 5000
     END
   )

【问题讨论】:

  • 你想要一个OR 条件?
  • 仅供参考:InvestAmount <> NULL 不会按您的意愿工作,它应该是 InvestAmount is not NULL

标签: sql sql-server


【解决方案1】:

这里不需要CASE WHEN,一个简单的 x OR y OR z 就足够了。

另外,如果InvestAmount 是一个可为空的列,那么要检查是否为空,您必须使用InvestAmount IS NOT NULL 而不是InvestAmount <> NULL

SELECT TOP 100 ProjType,projCost,InvestAmount,ProjBuildSize 
FROM dbo.Project 
WHERE
    (projCost > 0 AND projCost >= 10000000)
    OR (InvestAmount IS NOT NULL AND InvestAmount >= 12000000)
    OR (WHEN ProjBuildSize > 0 AND ProjBuildSize  >= 5000)

【讨论】:

  • 我需要的是满足第一个条件后是否只有一个条件要执行
【解决方案2】:

您可以在 where 子句中像这样使用 case 语句:

SELECT TOP 100 ProjType, projCost, InvestAmount, ProjBuildSize
FROM dbo.Project 
WHERE
   (
     CASE
     WHEN projCost > 0 AND projCost >= 10000000 then 1  
     WHEN InvestAmount IS NOT NULL AND InvestAmount >= 12000000 then 1
     WHEN ProjBuildSize > 0 AND ProjBuildSize >= 5000 then 1
     ELSE 0
     END
   ) = 1

如果满足您的任何when 条件,则case 将返回1,并且将满足where 子句条件,否则case 将返回0。

【讨论】:

  • 我需要的是满足第一个条件后是否只有一个条件要执行
  • @beiduoan 只要满足when 条件,case 语句就会自动停止计算,因此我编写的查询将起作用。
  • 不客气,如果有帮助,请随时投票并接受这个答案。
【解决方案3】:

你可以通过这种简单的方式实现它

SELECT TOP 100 ProjType,projCost,InvestAmount,ProjBuildSize FROM dbo.Project 
WHERE (projCost <= 0 OR projCost >= 10000000)
      AND (projCost <= 0 And ((InvestAmount is null)  OR InvestAmount >= 12000000))
      AND ((InvestAmount is null And projCost <= 0) And ((ProjBuildSize <= 0 ) OR ProjBuildSize  >= 5000))

【讨论】:

  • 这能回答你的问题吗?如果您需要任何帮助,请告诉我@beiduoan
  • 我需要的是满足第一个条件后是否只有一个条件要执行
  • 我刚刚更新了我的答案,请看@beiduoan
猜你喜欢
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2011-12-07
  • 2019-07-29
  • 1970-01-01
相关资源
最近更新 更多