sql >> Database >  >> RDS >> Sqlserver

SQL GROUP BY CASE-instructie met aggregatiefunctie

Ik vermoed dat je niet echt wilt GROUP BY een_product.

Het antwoord op: "Is er een manier om GROUP BY een kolomalias zoals some_product in dit geval, of moet ik dit in een subquery en daarop groeperen?" is: U kunt niet GROUP BY een kolomalias.

De SELECT clausule, waar kolomaliassen worden toegewezen, wordt pas verwerkt na de GROUP BY clausule. Een inline view of Common Table Expression (CTE) kan worden gebruikt om de resultaten beschikbaar te maken voor groepering.

Inline-weergave:

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


  1. Kan geen toegangspunt vinden met de naam 'InterlockedIncrement' in DLL 'kernel32.dll' - [e-mail beveiligd] 64 bit

  2. Hoe u Change Data Capture (CDC) op de hele tabel inschakelt OF CDC op tabel inschakelt met lijst met kolommen in SQL Server

  3. Wijzigingen in de replicatietopologie uitvoeren voor PostgreSQL

  4. MariaDB 10.6 en NextCloud:COMPRESSED Row is standaard alleen-lezen