Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction SQL GROUP BY CASE avec fonction d'agrégation

Je suppose que vous ne voulez pas vraiment GROUP BY un_produit.

La réponse à : "Existe-t-il un moyen de GROUP BY un alias de colonne tel que some_product dans ce cas, ou dois-je mettre ceci dans une sous-requête et grouper dessus ?" est : Vous ne pouvez pas GROUP BY un alias de colonne.

Le SELECT la clause, où les alias de colonne sont affectés, n'est pas traitée avant le GROUP BY clause. Une vue en ligne ou une expression de table commune (CTE) peut être utilisée pour rendre les résultats disponibles pour le regroupement.

Vue intégrée :

select ...
from (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... ) T
group by some_product ...

CTE :

with T as (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... )
select ...
from T
group by some_product ...