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

SQL GROUP BY CASE-sætning med aggregeret funktion

Mit gæt er, at du ikke rigtig ønsker at GROUP BY et_produkt.

svaret til: "Er der en måde at GROUP BY et kolonnealias såsom some_product i dette tilfælde, eller skal jeg sætte dette i en underforespørgsel og gruppe på det?" er: Du kan ikke GROUP BY et kolonnealias.

SELECT klausul, hvor kolonnealiaser er tildelt, behandles ikke før efter GROUP BY klausul. En indlejret visning eller fælles tabeludtryk (CTE) kunne bruges til at gøre resultaterne tilgængelige for gruppering.

Indlejret visning:

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. Hvordan kan jeg indsætte flere rækker i oracle med en sekvensværdi?

  2. Sådan tilføjes en separator til en sammenkædet streng i SQL Server - CONCAT_WS()

  3. Sådan fungerer Sign()-funktionen i PostgreSQL

  4. Hvor værdi i kolonne, der indeholder kommaseparerede værdier