заказать sql запрос по имени - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть запрос, который я бы хотел немного настроить для отображения различной информации. В настоящее время мой запрос получает все заказы с продуктами, отсортированными по количеству конверсий вверху. Вот запрос:

   SELECT nopv.ProductVariantID, COUNT(nopv.ProductVariantID), p.ProductId, c.CategoryID, c.Name FROM Nop_OrderProductVariant nopv
INNER JOIN Nop_ProductVariant npv
ON nopv.ProductVariantID = npv.ProductVariantId
INNER JOIN Nop_Product p
ON npv.ProductID = p.ProductId
INNER JOIN Nop_Product_Category_Mapping npcm
ON p.ProductId = npcm.ProductID
INNER JOIN Nop_Category c 
ON npcm.CategoryID = c.CategoryID
GROUP BY nopv.ProductVariantID, p.ProductId, c.CategoryID, c.Name
HAVING COUNT(*) > 0
ORDER BY COUNT(nopv.ProductVariantID) DESC

В результате я получаю:

enter image description here

Я хочу иметь возможность иметь каждую категорию только один раз, например, категория "программисты и модули" должна содержать только одну запись, содержащую сумму всех идентификаторов продукта в этой категории. Также можно избежать первого поля, поскольку при наличии нескольких вариантов продукта в запросе должен быть указан только один. Что мне действительно нужно, так это количество каждой категории и categoryID. Заранее спасибо, Лазиале

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Просто удалите Variant и ProductID как из списка выбора, так и из группы.

   SELECT
     COUNT(nopv.ProductVariantID) ,
     c.CategoryID ,
     c.Name
   FROM
     Nop_OrderProductVariant nopv
   INNER JOIN Nop_ProductVariant npv
   ON
     nopv.ProductVariantID = npv.ProductVariantId
   INNER JOIN Nop_Product p
   ON
     npv.ProductID = p.ProductId
   INNER JOIN Nop_Product_Category_Mapping npcm
   ON
     p.ProductId = npcm.ProductID
   INNER JOIN Nop_Category c
   ON
     npcm.CategoryID = c.CategoryID
   GROUP BY
     c.CategoryID ,
     c.Name
   HAVING
     COUNT(*) > 0
   ORDER BY
     COUNT(nopv.ProductVariantID) DESC
1 голос
/ 23 февраля 2012

Я думаю, что проблема ваша group by:

GROUP BY nopv.ProductVariantID, p.ProductId, c.CategoryID, c.Name

Попытка:

GROUP BY c.CategoryID, c.Name -- c.Name is here since you probably can't select it otherwise

Затем внесите все необходимые изменения в SELECT, чтобы он заработал.

Так что-то вроде этого:

SELECT COUNT(nopv.ProductVariantID), c.CategoryID, c.Name
FROM Nop_OrderProductVariant nopv
INNER JOIN Nop_ProductVariant npv
ON nopv.ProductVariantID = npv.ProductVariantId
INNER JOIN Nop_Product p
ON npv.ProductID = p.ProductId
INNER JOIN Nop_Product_Category_Mapping npcm
ON p.ProductId = npcm.ProductID
INNER JOIN Nop_Category c 
ON npcm.CategoryID = c.CategoryID
GROUP BY c.CategoryID, c.Name
HAVING COUNT(*) > 0
ORDER BY COUNT(nopv.ProductVariantID) DESC
...