Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pernyataan SQL GROUP BY CASE dengan fungsi agregat

Dugaan saya adalah Anda tidak benar-benar ingin GROUP BY beberapa_produk.

Jawaban untuk: "Apakah ada cara untuk GROUP BY alias kolom seperti some_product dalam kasus ini, atau apakah saya perlu memasukkan ini ke dalam subkueri dan grup di atasnya?" adalah: Anda tidak dapat GROUP BY alias kolom.

SELECT klausa, di mana alias kolom ditetapkan, tidak diproses sampai setelah GROUP BY ayat. Tampilan sebaris atau ekspresi tabel umum (CTE) dapat digunakan agar hasil tersedia untuk pengelompokan.

Tampilan sebaris:

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. Tidak dapat menemukan kolom dbo atau fungsi yang ditentukan pengguna atau dbo agregat.Splitfn, atau namanya ambigu

  2. Cara Mengonversi String ke Tanggal/Waktu di SQL Server menggunakan PARSE()

  3. Terjadi kesalahan terkait jaringan atau spesifik contoh saat membuat sambungan ke SQL Server

  4. Bagaimana cara menghitung total berjalan dalam SQL tanpa menggunakan kursor?

  5. Bagaimana Melakukan GABUNGAN ANTI SEMI KIRI di SQL Server