2012-02-23 8 views
0

J'ai une requête que je voudrais modifier un peu pour afficher des informations différentes. Actuellement, ma requête obtient toutes les commandes avec les produits classés par celui avec le plus de conversions en haut. Voici la requête:ordre requête SQL par nom

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 

Ce que j'ai en conséquence est la suivante:

enter image description here

Je veux être en mesure d'avoir chaque catégorie une seule fois, par exemple « programmeurs & modules » category devrait seulement un enregistrement, contenant la somme de tous les productvariantID de cette catégorie. Le premier champ peut également être évité, car s'il existe plusieurs variantes de produit, la requête doit en afficher une seule. Ce dont j'ai vraiment besoin, c'est le nombre de chaque catégorie et le numéro de catégorie. Merci à l'avance, Laziale

+0

La requête ne correspond pas au jeu de résultats. qu'est-ce que c'est (pas de nom de colonne)? – StingyJack

+0

@StingyJack requête mise à jour, désolé – Laziale

+1

Le sujet de votre question ne correspond pas au contenu. Avez-vous besoin de changer la commande? –

Répondre

1

Je pense que la question est votre group by:

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

Essayez:

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

Puis faites les changements que vous avez besoin de votre SELECT il fonctionnera donc.

donc quelque chose comme ceci:

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 
+0

Merci pour votre réponse, vos réponses et @JamieF étaient correctes mais vous avez été plus rapide. – Laziale

2

Retirez simplement la variante et ProductID à la fois la sélection et Grouper par.

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