将 CASE 与 WHERE 一起使用



我想将 CASE 与 WHERE 一起使用,因此,如果 countryId 为 -1,请不要选择任何值,否则请选择值这是我的非工作代码

 DECLARE @countryId int=-1 --for example
   SELECT * FROM dbo.bbmf WHERE status=1 
 AND countryId =
CASE WHEN @countryId = -1 THEN 
 --select any
ELSE
 countryId=@countryId
END

感谢您的帮助

我喜欢这样:

DECLARE @countryId int=-1 
SELECT * 
FROM dbo.bbmf 
WHERE 
    status=1 
    AND 
    1 = CASE 
        WHEN @countryId = -1 THEN 0
        WHEN countryId=@countryId THEN 1
        ELSE 0 --<<probably don't need the ELSE
    END

你的问题不清楚,所以我看到两个你可能想要获得的结果。

首先是仅取决于countryID。因此,如果countryID为 -1,请不要选择任何记录:

如果您没有 -1 的countryId,那么您可以使用这个简单的选择,因为,如果 @countryID = -1 ,则不会返回任何内容(因为 AND),如果不是 -1,则所需的记录将返回:

SELECT * 
FROM dbo.bbmf 
WHERE status=1 
  AND (countryId=@countryId)

(除了第一个解决方案之外,如果您有 id = -1 的国家/地区,则应将AND (countryId=@countryId)更改为 AND (countryId=@countryId AND @countryId <> -1)

第二个是,如果countryId = -1,那么你只需要检查状态,并获取每条记录与status = 1,那么你应该使用这个语句:

SELECT * 
FROM dbo.bbmf 
WHERE status=1 
  AND (countryId = -1 
     OR countryId = @countryId)

无论国家/地区 ID 是否为 -1,您都执行 SELECT 语句,这是一个多余的调用。 如果只想在 CountryId 不等于 -1 的情况下运行 SELECT 语句,则只需在 WHERE 子句中将其过滤掉或使用Conditional

过滤:

SELECT * FROM dbo.bbmf 
WHERE status=1 AND countryId != -1

使用条件:

IF (@countryId != -1)  
BEGIN
    -- SELECT STATEMENT HERE
END 

尝试演示

SELECT * FROM dbo.bbmf 
WHERE status=1 
AND countryId = @CountryID
AND @countryId <> -1
SELECT * FROM dbo.bbmf 
WHERE status=1 
AND countryId <> -1

我找不到您的代码的用例,但可能是您可以使用不可能的 where 子句运行选择,例如:

从 DBO.BBMF 中选择 *,其中状态 = 1 和 1>2

但是,正如一些人所说,如果您不想要任何结果,请不要运行查询。

最新更新