WHERE 절의 한 부분을 변수에 값이있는 조건에서 수행하고 싶습니다. 나는 여러 가지 방법으로이 글을 쓰려고 노력했지만 항상 실수를 범하고 누군가가 도울 수 있는지 궁금해하고 있었다.SQL : var = ''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
내가 잘못 생각하는 사람이 있습니까?
또는 귀하의 요구에 부합하지 않는 이유가 있습니까? AND (@itemID = ''OR (...)) – billinkc
문제를 해결할 수는 없지만 테이블에 별칭 이름을 사용하면 혼란을 줄일 수 있습니다. – Beef