1

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 

ответ

0

Что-то, кажется, от с круглыми скобками ... Как правило, вы бы это сделать, как, например:

((@somefield IS NULL) OR (SomeField = @somefield)) 

Например, если я правильно читать ваш запрос, если @brandname имеет нулевое значение, то все результаты вернутся. Кажется, в вашем запросе много избыточных утверждений и отсутствующих внешних скобок для группировки операторов.

+0

Спасибо. Это помогло мне в правильном направлении. Это была довольно большая проблема со скобками и группировкой. Однако после того, как я перегруппировал их, SSMS не перекодировал его в своем собственном формате, как это было раньше, что было для меня интересным. –

 Смежные вопросы

  • Нет связанных вопросов^_^