У меня две проблемы, первая проблема - мои два СЧЁТА, с которых я начинаю. GroupID — это строка, которая объединяет продукты (имя_год вместе), один и тот же продукт, но разного размера. Если у меня есть три обзора в tblReview, и все они имеют один и тот же GroupID, я хочу вернуть 3. Моя проблема в том, что если у меня есть три продукта с разными ProductID, но одним и тем же GroupID, и я добавляю три обзора к этому GroupID, я получаю 9 возвратов (3 * 3). Если у меня есть только один продукт с одним и тем же GroupID и тремя отзывами, он работает (1 * 3 = 3 возврата)
Вторая проблема заключается в том, что если у меня есть ORDER BY CASE Price, я должен также добавить GROUP BY Price, и тогда я не получаю эффекта DISTINCT, который мне нужен. И это только для того, чтобы показать продукты, которые имеют уникальный GroupID.
Вот запрос, надеюсь, кто-нибудь может помочь мне с этим.
ALTER PROCEDURE GetFilterdProducts
@CategoryID INT, @ColumnName varchar(100)
AS
SELECT COUNT(tblReview.GroupID) AS ReviewCount,
COUNT(tblComment.GroupID) AS CommentCount,
Product.ProductID,
Product.Name,
Product.Year,
Product.Price,
Product.BrandID,
Product.GroupID,
AVG(tblReview.Grade) AS Grade
FROM Product LEFT JOIN
tblComment ON Product.GroupID = tblComment.GroupID LEFT JOIN
tblReview ON Product.GroupID = tblReview.GroupID
WHERE (Product.CategoryID = @CategoryID)
GROUP BY Product.ProductID, Product.BrandID, Product.GroupID, Product.Name, Product.Year, Product.Price
HAVING COUNT(distinct Product.GroupID) = 1
ORDER BY
CASE
WHEN @ColumnName='Name' THEN Name
WHEN @ColumnName='Year' THEN Year
WHEN @ColumnName='Price' THEN Price
END
Мои таблицы:
Продукт: ProductID, Название, Год, Цена, BrandID, GroupID
tblReview: ReviewID, Описание, Оценка, ProductID, GroupID
tblComment: CommentID, Description, ProductID, GroupID
Я думаю, что моя проблема заключается в том, что если у меня есть три GroupID с одинаковым именем, например, Nike_2010 в Product, и у меня есть три обзора в tblReview, которые подсчитывают первую строку в продуктах, содержащих Nike_2010, подсчитывают, сколько отзывов в tblReview с тем же GroupID, Nike_2010 а затем вторую строку в Product, содержащую Nike_2010, а затем снова и снова выполняйте один и тот же подсчет, в результате чего получается 9 строк. Как этого избежать?