我正在尝试过滤SELECT statament。我想要的行为是,如果参数@productId =%,那么我希望WHERE子句执行以下操作:
WHERE (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId)
如果@productId不=%,我想要以下WHERE子句:
WHERE (PDT.PK_Product = @productId)
我无法实现这一目标。
我已经尝试过案例陈述,但无法理解它。我也尝试过:
WHERE IF @productId = '%' (
DTH.TaskId IS NULL
OR PDT.PK_Product LIKE @productId
) ELSE (
PDT.PK_Product = @productId
)
这会导致语法错误。我如何达到预期的效果?
答案 0 :(得分:6)
WHERE
(@productId = '%' AND (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId))
OR
(NOT @productId = '%' AND (PDT.PK_Product = @productId))
答案 1 :(得分:0)
--assumes -1 and 0 are invalid TaskIds
WHERE PDT.PK_Product LIKE @productId
OR coalesce(DTH.TaskId, -1) = case when @productId = '%' THEN -1 ELSE coalesce(DTH.TaskID,0) END
答案 2 :(得分:0)
SELECT..
FROM..
WHERE @productId = '%' AND (DTH.TaskId IS NULL OR PDT.PK_Product LIKE @productId)
UNION
SELECT...
FROM...
WHERE @productId != '%' AND PDT.PK_Product = @productId