Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL GROUP BY CASE z funkcją agregującą

Domyślam się, że tak naprawdę nie chcesz GROUP BY jakiś_produkt.

Odpowiedź na: „Czy istnieje sposób na GROUP BY alias kolumny, taki jak w tym przypadku some_product, czy też muszę umieścić to w podzapytaniu i pogrupować na nim?” to: Nie możesz GROUP BY alias kolumny.

SELECT klauzula, w której przypisane są aliasy kolumn, jest przetwarzana dopiero po GROUP BY klauzula. W celu udostępnienia wyników do grupowania można użyć wbudowanego widoku lub wspólnego wyrażenia tabelowego (CTE).

Widok wbudowany:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można załadować SqlServerSpatial.dll

  2. Błąd systemu operacyjnego SQL Server 5:5 (odmowa dostępu).

  3. Czy możesz mieć logikę „jeśli-to-inaczej” w SQL?

  4. Wydajność SQL w LEFT OUTER JOIN vs NOT EXISTS

  5. Wyzwalacz SQL Server wstawia wartości z nowego wiersza do innej tabeli