其中Column1 = case @var = 0,然后为空

问题描述

我有以下CTE分层查询。

declare @Cat_Fkey int = 0;
WITH CTE AS
(
    SELECT tblCategories.ID as  RowID,CatEName as RowName
    FROM tblCategories 
    WHERE Cat_Fkey  is null
    UNION ALL
    SELECT t.id,cast(cte.RowName +' '+ t.CatEName as varchar(100))
    FROM tblCategories t
    INNER JOIN CTE ON t.Cat_Fkey = CTE.RowID    
)

我希望在where子句中有一个案例。例如

WHERE Cat_Fkey = case
when @Cat_Fkey = 0 then null
else @Cat_Fkey
end

我知道null为哪里与= null不同,上面的查询只是一个表示。

我希望结果是@cat_fkey = 0时,然后cat_fkey为null。 @cat_fkey 时,则cat_fkey @cat_fkey。

解决方法

使用布尔逻辑:

where 
    (@cat_fkey = 0 and cat_fkey is null)
    or (cat_fkey = @cat_fkey)
,

我使用了Larnu建议的and / or

WHERE (@Cat_Fkey = 0 and Cat_Fkey is null) or (Cat_Fkey = @Cat_Fkey)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...