【问题标题】:Can I use CASE statement in the WHERE clause?我可以在 WHERE 子句中使用 CASE 语句吗?
【发布时间】:2017-05-07 20:52:58
【问题描述】:

已编辑


如果另一个条件为真,我想检查一个条件,否则不

 DECLARE @id INT= 1;

 SELECT * 
   FROM TABLE1
  WHERE ETID = CASE  
          WHEN ID = @id THEN 
            1 
          ELSE 
            @id = 0 
        END

【问题讨论】:

  • 这不是问题,请完成。
  • 请删除问题并尽可能详细地再次提问。
  • 您的查询是什么?
  • 看来你想要where (EtId = 1) and (Id = @id) or (EtId = 0) and (@id = 0)或者类似的条件
  • 问题是我们无法读懂你的想法。那么你想达到什么目标?你期望会发生什么,反而会发生什么?此外,我们不知道您的数据库中有哪些数据,因此不知道可能的结果是什么。需要这样的信息才能得出一个好的答案。要完整。见How do I ask a good question?

标签: sql


【解决方案1】:

可能,但很可能不需要。

DECLARE @id INT= 1;

 SELECT * 
   FROM TABLE1
  WHERE ETID = 
        CASE  
          WHEN ID = @id THEN 1 
          WHEN @id = 0  THEN ...
          WHEN ...
          ELSE ...
        END

替代解决方案

DECLARE @id INT= 1;

 SELECT * 
   FROM TABLE1
  WHERE    (ID = @id and ETID = 1)
        or (@id = 0 ...)
        or ...

【讨论】:

  • 看看能不能回答你的问题
【解决方案2】:

逆向工程:

如果另一个条件为真,我想检查一个条件,否则

    WHERE ETID = CASE  
            WHEN ID = @id THEN 
              1 
            ELSE 
             @id = 0 
          END

让我们重建实际情况(至少尝试这样做):

  if (ID = @id) then 
    if (ETID = 1) then 
      obtain record
  else if (ID != @id) -- "else" in case
    obtain record -- want to check one condition...else NOT

那么让我们写在哪里:

 select *
   from Table1
  where (ID = @id) and (ETID = 1) or -- check one condition if another condition true...
        (ID <> @id)                  -- ...else not

但是,由于问题非常模糊,其他一些变体是可能的,例如:

 select *
   from Table1
  where (ID = @id) and (ETID = 1) or -- check one condition if another condition true...
        (ETID <> 1)                  -- ...else not

根据一个条件另一个条件的意思

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 2012-04-28
    • 2018-07-04
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多