sql >> Databáze >  >> RDS >> Sqlserver

Příkaz SQL GROUP BY CASE s agregační funkcí

Hádám, že ve skutečnosti nechcete GROUP BY nějaký_produkt.

Odpověď na: "Existuje způsob, jak GROUP BY alias sloupce, jako je v tomto případě some_product, nebo to musím vložit do poddotazu a seskupit to?" je: Nemůžete GROUP BY alias sloupce.

SELECT klauzule, kde jsou přiřazeny aliasy sloupců, se zpracuje až po GROUP BY doložka. Ke zpřístupnění výsledků pro seskupování lze použít vložený pohled nebo společný tabulkový výraz (CTE).

Inline zobrazení:

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. Příklady SYSDATE() – MySQL

  2. Příklady ADDTIME() – MySQL

  3. Obecná chyba:Neshoda verze OS

  4. SQL Server 2016:Vytvořte přihlášení