Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Anweisung GROUP BY CASE mit Aggregatfunktion

Ich vermute, dass Sie nicht wirklich GROUP BY wollen irgendein_produkt.

Die Antwort auf: "Gibt es eine Möglichkeit GROUP BY B. in diesem Fall ein Spaltenalias wie some_product, oder muss ich dies in eine Unterabfrage stellen und darauf gruppieren?" ist: Sie können nicht GROUP BY verwenden ein Spaltenalias.

Die SELECT -Klausel, in der Spaltenaliase zugewiesen werden, wird erst nach GROUP BY verarbeitet Klausel. Eine Inline-Ansicht oder ein allgemeiner Tabellenausdruck (CTE) könnte verwendet werden, um die Ergebnisse für die Gruppierung verfügbar zu machen.

Inline-Ansicht:

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