Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução SQL GROUP BY CASE com função agregada


Meu palpite é que você realmente não deseja GROUP BY algum_produto.

A resposta para: "Existe uma maneira de GROUP BY um alias de coluna como some_product neste caso, ou preciso colocar isso em uma subconsulta e agrupar isso?" é: Você não pode GROUP BY um alias de coluna.

O SELECT cláusula, onde os aliases de coluna são atribuídos, não é processada até depois do GROUP BY cláusula. Uma visualização embutida ou expressão de tabela comum (CTE) pode ser usada para disponibilizar os resultados para agrupamento.

Visualização em linha:
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 ...