2010-06-30 5 views
1

s'il vous plaît aidez-moi à cette requêterequête SQL pour le résumé des ventes

select pName,Price, (Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname, Quantity, Price; 

Cette requête vise à récapitulatif des ventes en fonction à ce jour, mais il montre en double produits Nom.

Sortie de requête ci-dessus

MAK 2 T OIL 5LTR. 635 3175 
MAK 2 T OIL 5LTR. 635 6350 
MAK ELITE 3LTR  422 6330 
MAK ELITE 3LTR  422 8440 
SYSTEM PURGE   305 6100 
SYSTEM PURGE   305 15250 

que vous pouvez voir se répéter le nom du produit, mais je veux vente résumé selon Nom du produit.

grâce ...................

Répondre

4
SELECT pName, SUM(Price * Quantity) AS SalesValues 
FROM saleslog 
WHERE BillDate = '12-10-2010' 
     AND pGroup = 15 
GROUP BY 
     pname 

Je retiré Price car il peut (éventuellement) varier et on ne sait pas que l'on à la sortie.

Si le prix ne varie pas, utilisez ceci:

SELECT pName, MIN(price), SUM(Price * Quantity) AS SalesValues 
FROM saleslog 
WHERE BillDate = '12-10-2010' 
     AND pGroup = 15 
GROUP BY 
     pname 
+0

Bonjour, cela fonctionne. Je vous remercie. Pouvez-vous résoudre mon problème aussi http://stackoverflow.com/questions/3142023/displaying-sum-of-aggregate-data-in-reports-rdlc –

2

Essayez ceci:

select pName, price, SUM(Price*Quantity) as SalesValues 
from saleslog 
where BillDate='12-10-2010' and pGroup=15 
group by pname, price 

Il vous suffit de grouper les colonnes qui ne sont pas dans un agréger sur la clause select. Je suppose que chaque produit a un prix identique.

Vous ne devez pas même groupe par prix, si vous utilisez un agrégat ne l'afficher (MIN ou MAX par exemple):

select pName, MAX(price), SUM(Price*Quantity) as SalesValues 
from saleslog 
where BillDate='12-10-2010' and pGroup=15 
group by pname 

Voici quelques documents sur la clause GROUP BY:

Regroupe un ensemble de lignes sélectionné en un ensemble de lignes récapitulatives par les valeurs d'une ou de plusieurs colonnes ou expressions. Une ligne est renvoyée pour chaque groupe. Les fonctions d'agrégation de la liste de clauses SELECT fournissent des informations sur chaque groupe au lieu de lignes individuelles.

1

Voici votre requête originale:

select pName,Price, (Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname, Quantity, Price; 

Maintenant, vous dites que vous voulez regrouper par pName seulement. Alors faisons ça.

select pName,Price, (Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

Maintenant, il est bien sûr va donner une erreur. Nous devons donc mettre un peu d'agrégation sur les autres colonnes. Il est logique de SUM la colonne SalesValues.

select pName,Price, SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

La colonne de prix est toujours un problème, cependant. Quel agrégateur a du sens pour cela? Cela dépend juste. Vous pouvez faire MAX, MIN ou MOYENNE, je suppose. Mais en réalité, il doit être soit oublié, soit ajouté au groupe par. Si elle est ajoutée au groupe par, vous ne pouvez plus avoir une seule ligne pour chaque pName. Si vous mettez un agrégateur sur Prince, assurez-vous de changer le nom de la colonne pour refléter ce que cela signifie.

/* Leave out the Price completely. (My favorite option.) */ 
select pName,SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

/* Group by Price. You now have multiple rows per pName. */ 
select pName,Price, SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname, Price; 

/* Average the Price. (OK, but could lead to confusion.) */ 
select pName,AVG(Price) as AveragePrice, SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

/* Max Price. (Almost useless). */ 
select pName,MAX(Price) as MaximumPrice, SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

/* Min Price. (Almost useless). */ 
select pName,MIN(Price) as MinimumPrice, SUM(Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname; 

Je ne recommande pas l'agrégation prix, cependant, (en particulier MAX et MIN) car il sera probablement entraîner une confusion sur la ligne quand les gens essaient d'utiliser la valeur.

Questions connexes