首页 > 解决方案 > 其中 Column1 = case @var = 0 然后为 null

问题描述

我有以下 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

我知道where is null 和= null 不一样,上面的查询只是一个表示。

我希望结果是@cat_fkey = 0,然后 cat_fkey 为空。当@cat_fkey <> 时,cat_fkey @cat_fkey 在哪里。

标签: sqlsql-serverwhere-clausecommon-table-expressionrecursive-query

解决方案


使用布尔逻辑:

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

推荐阅读