1

SQL Server Management Studio 2005MS 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가 null의 경우, 모든 결과가 반환됩니다. 쿼리에는 중복 된 문이 많이 있고 그룹 문에는 바깥 괄호가 없습니다.

+0

감사합니다. 이것은 올바른 방향으로 나를 인도하는 데 도움이되었습니다. 그것은 괄호와 그룹핑에 관한 많은 문제였습니다. 그러나 내가 그들을 재편성 한 후에도 SSMS는 이전에했던 것처럼 자신 만의 형식으로 다시 코딩하지 않았습니다. –