SQL Server マネジメント スタジオ 2005
ユーザーが説明、原産国、ブランド名、栽培方法などのさまざまなカテゴリを検索できるようにするクエリを作成しました。ユーザーは必要な数のフィルターにデータを入力でき、返される結果は入力内容に基づいています。
以下は、このクエリの作業バージョンです。ただし、これは、以前に書いた元のクエリを SSMS が再フォーマットした方法です。このフィルターにさらに 2 つの列を追加できるように、以前にどのように記述したかを理解する必要があります。
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句にステートメントを1つずつ追加して、それらが機能するかどうかを確認しただけだと思います。これをもう一度試しましたが、うまくいきませんでした。洞察をいただければ幸いです。ありがとうございました。
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