问题描述
我有以下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)