SQL Server Management Studio 2005Как фильтровать с производной таблицей в MS SQL Server?
Я написал запрос, который позволит пользователю выполнять поиск по различным категориям, таким как Описание, Страна происхождения, Фирменное наименование и Метод роста. Пользователь может вводить данные для такого количества фильтров, сколько им хотелось бы, и возвращенные результаты будут основаны на том, что они ввели.
Ниже приведена рабочая версия этого запроса; однако именно так SSMS переформатировал мой первоначальный запрос, который я написал ранее. Мне нужно, чтобы попытаться выяснить, как я написал это раньше, так что я могу добавить еще два столбца этому фильтру:
SELECT DISTINCT masterCorporateGtin.SupplierNo, masterCorporateGtin.GTIN, masterCorporateGtin.Description, masterCorporateGtin.Commodity, masterCorporateGtin.Variety, masterCorporateGtin.CoO, masterCorporateGtin.PackSize, masterCorporateGtin.BrandName, masterCorporateGtin.GrowMethod, masterCorporateGtin.Grade
FROM GTINs AS masterCorporateGtin INNER JOIN
(SELECT DISTINCT SupplierNo, GTIN, Description, CoO, PackSize, BrandName, GrowMethod, Grade
FROM GTINs AS masterCorporateGtin
WHERE (Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND
(GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND (CoO = @countryoforigin) AND
(@growmethod IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND
(GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (BrandName LIKE '%' + @brandName + '%') AND (@growmethod IS NULL) AND
(@countryoforigin IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (CoO = @countryoforigin) AND (@growmethod IS NULL) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND
(@brandName IS NULL) OR
(Description LIKE '%' + @productDescription + '%') AND (@growmethod IS NULL) AND (@countryoforigin IS NULL) AND
(@brandName IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (CoO = @countryoforigin) AND (@growmethod IS NULL) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND
(@productDescription IS NULL) OR
(BrandName LIKE '%' + @brandName + '%') AND (@growmethod IS NULL) AND (@countryoforigin IS NULL) AND
(@productDescription IS NULL) OR
(GrowMethod LIKE '%' + @growmethod + '%') AND (CoO = @countryoforigin) AND (@brandName IS NULL) AND
(@productDescription IS NULL) OR
(GrowMethod LIKE '%' + @growmethod + '%') AND (@countryoforigin IS NULL) AND (@brandName IS NULL) AND
(@productDescription IS NULL) OR
(CoO = @countryoforigin) AND (@growmethod IS NULL) AND (@brandName IS NULL) AND (@productDescription IS NULL) OR
(@growmethod IS NULL) AND (@countryoforigin IS NULL) AND (@brandName IS NULL) AND (@productDescription IS NULL))
AS productFilter ON masterCorporateGtin.Description = productFilter.Description AND masterCorporateGtin.BrandName = productFilter.BrandName AND
masterCorporateGtin.GrowMethod = productFilter.GrowMethod AND masterCorporateGtin.CoO = productFilter.CoO
Из того, что я помню все, что я делал раньше было что-то похожее на это ниже. Я думаю, что я просто добавлял предложения в предложение WHERE один за другим, чтобы увидеть, работают ли они. Я пробовал это снова, но это не сработало. Я был бы признателен за понимание. Спасибо.
SELECT DISTINCT masterCorporateGtin.SupplierNo, masterCorporateGtin.GTIN, masterCorporateGtin.Description, masterCorporateGtin.Commodity, masterCorporateGtin.Variety, masterCorporateGtin.CoO, masterCorporateGtin.PackSize, masterCorporateGtin.BrandName, masterCorporateGtin.GrowMethod, masterCorporateGtin.Grade
FROM GTINs AS masterCorporateGtin INNER JOIN
(SELECT DISTINCT SupplierNo, GTIN, Description, Commodity, PackSize, BrandName, GrowMethod, Grade
FROM GTINs AS masterCorporateGtin
WHERE (Description LIKE '%' + @productDescription + '%') OR
(@productDescription IS NULL)) AS searchFilter ON masterCorporateGtin.Description = searchFilter.Description
Спасибо. Это помогло мне в правильном направлении. Это была довольно большая проблема со скобками и группировкой. Однако после того, как я перегруппировал их, SSMS не перекодировал его в своем собственном формате, как это было раньше, что было для меня интересным. –