Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Istruzione SQL GROUP BY CASE con funzione di aggregazione

La mia ipotesi è che tu non voglia davvero GROUP BY qualche_prodotto.

La risposta a: "C'è un modo per GROUP BY un alias di colonna come some_product in questo caso, o devo inserirlo in una sottoquery e raggrupparlo?" è: Non puoi GROUP BY un alias di colonna.

Il SELECT La clausola, in cui vengono assegnati gli alias di colonna, non viene elaborata fino a dopo il GROUP BY clausola. È possibile utilizzare una vista in linea o un'espressione di tabella comune (CTE) per rendere i risultati disponibili per il raggruppamento.

Vista in linea:

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