grouper par sous-requête dans le server sql

J'ai une table et je veux regrouper les loggings par colonne générée dynamicment. Dis comme dans ma requête c'est newcol. Lors de l'exécution de cette requête, je reçois l'erreur suivante:

La colonne 'SalesProductDetails.ProductId' n'est pas valide dans la list de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY.

C'est la question que j'ai essayée

select tbl.nwecol,tbl.ProductId,tbl.Products_Name,tbl.Qunatity,tbl.SKUCode from ( select SPD.ProductID, PR.SKUCode, PR.Products_Name, sum(SPD.Qunatity) as Qunatity, cast(round(((SPD.BasePrice*SPD.Qunatity)+STD.SalesTaxAmt)/SPD.Qunatity,2) as numeric(36,2)) as nwecol, SM.Isactive from SalesProductDetails SPD join SalesMaster SM on SPD.SalesId=SM.SalesId join Sales_TaxDetails STD on SPD.ProductSalesID=STD.ProductSalesID join Products Pr on Pr.ProductID=SPD.ProductId where SPD.Isactive=1 and SM.Isactive=1 and SPD.ProductId=1 ) as tbl group by tbl.nwecol,tbl.ProductId,tbl.Products_Name,tbl.Qunatity,tbl.SKUCode 

Je pense que ce que vous essayez de faire est de calculer la sum basée sur la colonne que vous avez générée (nwecol). Dans ce cas, vous devez déplacer l'agrégat (SUM) en dehors de la sous-requête comme suit:

 select tbl.nwecol,tbl.ProductId,tbl.Products_Name,tbl.SKUCode, SUM(tbl.Qunatity) from ( select SPD.ProductID, PR.SKUCode, PR.Products_Name, SPD.Qunatity cast(round(((SPD.BasePrice*SPD.Qunatity)+STD.SalesTaxAmt)/SPD.Qunatity,2) as numeric(36,2)) as nwecol, SM.Isactive from SalesProductDetails SPD join SalesMaster SM on SPD.SalesId=SM.SalesId join Sales_TaxDetails STD on SPD.ProductSalesID=STD.ProductSalesID join Products Pr on Pr.ProductID=SPD.ProductId where SPD.Isactive=1 and SM.Isactive=1 and SPD.ProductId=1 ) as tbl group by tbl.nwecol,tbl.ProductId,tbl.Products_Name,tbl.SKUCode 

Je pense qu'il est nécessaire de ne pas utiliser la clause group by sans utiliser de fonction d'agrégat comme (sum, avg, count, max). Essayons sans clause group by dans l'instruction de sélection externe

Vous avez utilisé product_id pour Product_details En tant que table PR dans la jointure mais manqué d'écrire la même chose dans la clause group by !!!!

Je ne suis pas sûr de ce qui n'est pas clair sur le message d'erreur. Votre agrégation est dans les colonnes suivantes:

  • tbl.nwecol
  • tbl.ProductId
  • tbl.Products_Name
  • tbl.Qunatity
  • tbl.SKUCode

Aucun de ceux-ci sont tbl.ProductId . Ainsi, vous pouvez résoudre ce problème en enveloppant ce dernier dans une fonction d'agrégation, telle que:

 MIN(tbl.ProductId) MAX(tbl.ProductId) 

Ou, incluez tbl.ProductId dans le group by .