Я хотел бы выполнить одну часть предложения WHERE при условии, что переменная имеет значение. Я пытался написать это разными способами, но всегда сталкивался с ошибкой и задавался вопросом, может ли кто-нибудь помочь.
Код ниже - мой текущий оператор SQL, который работает, но ничего не даст, если мой @itemId пуст. Я хотел бы только уменьшить результаты, если @itemId в качестве значения.
DECLARE @itemId nvarchar(max)
SET @itemId = 'someId'
SELECT
SalesOrdersItems.Id,
CASE
WHEN SalesOrderItems.ItemType = 'P' THEN Products.ProductId
WHEN SalesOrderItems.ItemType = 'S' THEN Sundries.SundryId
WHEN SalesOrderItems.ItemType = 'F' THEN FreightMethods.FreightMethodId
ELSE SalesOrderItems.FreeTextItem
END AS ItemId
FROM SalesOrderItems
LEFT OUTER JOIN Products ON SalesOrderItems.Product = Products.Product
LEFT OUTER JOIN Sundries ON SalesOrderItems.Sundry = Sundries.Sundry
LEFT OUTER JOIN FreightMethods ON SalesOrderItems.FreightMethod = FreightMethods.FreightMethod
WHERE
SalesOrdersItems.area LIKE 'SE%'
AND (Products.ProductId = @itemId OR Sundries.SundryId = @itemId OR FreightMethods.FreightMethodId = @itemId OR SalesOrderItems.FreeTextItem = @itemId)
Я попытался написать последнюю строку, как эта (см. Код ниже), но она не работает.
AND CASE
WHEN @itemId = '' THEN 1
ELSE (Products.ProductId = @itemId OR Sundries.SundryId = @itemId OR FreightMethods.FreightMethodId = @itemId OR SalesOrderItems.FreeTextItem = @itemId)
END
У кого-нибудь есть идеи, где я ошибаюсь?