Sql where子句中的Case when then

Sql where子句中的Case when then,sql,sql-server,Sql,Sql Server,如果满足了其中一个条件,如何在where子句中使用case when?我需要的是,如果一个条件满足以下条件,在满足第一个条件后,只有一个条件要执行,它将不会执行。当第一个条件满足时,case语句将立即停止进一步计算 SELECT TOP 100 ProjType, projCost, InvestAmount, ProjBuildSize FROM dbo.Project WHERE ( CASE WHEN projCost > 0 then projCost

如果满足了其中一个条件,如何在
where
子句中使用
case when
?我需要的是,如果一个条件满足以下条件,在满足第一个条件后,只有一个条件要执行,它将不会执行。当第一个条件满足时,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
   )

您不需要使用
情况,当这里出现
时,一个简单的x
y
z就足够了

此外,如果
InvestAmount
是一个可为空的列,则要检查是否为空,必须执行
InvestAmount不是空的
而不是
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)

您不需要使用
情况,当这里出现
时,一个简单的x
y
z就足够了

此外,如果
InvestAmount
是一个可为空的列,则要检查是否为空,必须执行
InvestAmount不是空的
而不是
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)

你可以用这种简单的方法来实现它

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))
从dbo.Project中选择前100名项目类型、项目成本、投资金额、项目构建大小
其中(项目成本=10000000)
和(项目成本=12000000))

和((InvestAmount为空,projCost您可以通过这种简单的方式实现它

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))
从dbo.Project中选择前100名项目类型、项目成本、投资金额、项目构建大小
其中(项目成本=10000000)
和(项目成本=12000000))

和((InvestAmount为null,projCost您可以在
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

如果满足了
条件,则
case
将返回
1
,并且
where
子句条件将得到满足,否则
case
将返回
0

您可以在
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

如果满足了
条件,则
案例
将返回
1
,并且
where
子句条件将得到满足,否则
案例
将返回
0

您想要的
条件?仅供参考:
InvestAmount NULL
将无法按您的意愿工作,它将应该是
InvestAmount not NULL
你想要一个
条件吗?仅供参考:
InvestAmount NULL
不会按你的意愿工作,它应该是
InvestAmount not NULL
这回答了你的问题吗?如果你需要任何帮助,请告诉我@北斗安我需要的是如果第一个条件之后只有一个条件需要执行条件满足我刚刚更新了我的答案,请看一看@Beiduoan这个答案是否回答了你的问题?如果你需要任何帮助@Beiduoan,请告诉我。我需要的是如果在第一个条件满足后只有一个条件需要执行。我刚刚更新了我的答案,请看一看@Beiduoan。我需要的是如果只有一个条件需要执行满足第一个条件后执行我需要的是如果满足第一个条件后只有一个条件要执行我需要的是如果满足第一个条件后只有一个条件要执行met@beiduoan当满足
条件时,
案例
语句会自动停止计算,所以我写的查询将起作用。不客气,请随意投票,如果有帮助,请接受这个答案。我需要的是,在第一个条件被满足后,是否只有一个条件需要执行met@beiduoan当满足
条件时,
case
语句会在
一满足条件时自动停止计算,因此查询写出来会有用的。不客气,请随意投票,如果有帮助,请接受这个答案。