Witam. Chce napisac zapytanie, ktore w zaleznosci od przekazanego parametru bedzie filtrowalo wyniki. Tzn. na poczatku mamy recordset o 1000 rekordow (jesli nie zadalismy filtrow). Teraz jesli mamy podany GroupId - zmniejsza nam sie ilosc do np. 600, jesli podamy GroupId i ProducedId, powiedzmy do np. 200 a jesli jeszcze dodamy CategoryId, zostaje 40 rekordow. Napisalem do tego takie zapytanie:
DECLARE @Criteria dbo.ProductPropertyTable
INSERT INTO @Criteria VALUES (6, 13, 1);
SELECT
PP.ProductIndex
, PP.PartName
, G.[Name] AS GroupName
, M.[Name] AS ProducerName
, C.[Name] AS CategoryName
, G.Id AS GroupId
, M.Id AS ProducerId
, C.Id AS CategoryId
FROM Product.Product AS PP
LEFT JOIN Dictionary.[Group] AS G ON PP.GroupDictGroupId = G.Id
LEFT JOIN Dictionary.Manufacturer AS M ON PP.ProducerDictProducerId = M.Id
LEFT JOIN Dictionary.Category AS C ON PP.CategoryDictCategoryId = C.Id
WHERE
G.Id IN (SELECT GroupId FROM @Criteria)
AND M.Id IN (SELECT ProducerId FROM @Criteria)
AND C.Id IN (SELECT CategoryId FROM @Criteria)
ale nie radzi sobie ono z wartosciami null w parametrze. Jesli jak w przykladzie przekaze np. 6, 13 i 1 - jest ok ale jesli 6, 13, null - to juz nic nie zwraca. Parametr musi byc tabela - jak w moim przykladzie.
Prosze o podpowiedzi.