sql >> Base de Datos >  >> RDS >> Sqlserver

Sentencia SQL GROUP BY CASE con función agregada

Supongo que realmente no quieres GROUP BY algún_producto.

La respuesta a: "¿Hay alguna forma de GROUP BY un alias de columna como some_product en este caso, o necesito poner esto en una subconsulta y agrupar eso?" es: No puedes GROUP BY un alias de columna.

El SELECT cláusula, donde se asignan alias de columna, no se procesa hasta después de GROUP BY cláusula. Se podría usar una vista en línea o una expresión de tabla común (CTE) para que los resultados estén disponibles para agruparlos.

Vista en línea:

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 ...

CET:

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 ...