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

Bagaimana cara menggabungkan GROUP BY dan ROW_NUMBER?

Wow, jawaban lainnya terlihat rumit - jadi saya harap saya tidak melewatkan sesuatu yang jelas.

Anda dapat menggunakan OVER /PARTITION BY terhadap agregat, dan mereka kemudian akan melakukan pengelompokan/penggabungan tanpa GROUP BY ayat. Jadi saya baru saja mengubah kueri Anda menjadi:

select T2.ID AS T2ID
    ,T2.Name as T2Name
    ,T2.Orders
    ,T1.ID AS T1ID
    ,T1.Name As T1Name
    ,T1Sum.Price
FROM @t2 T2
INNER JOIN (
    SELECT Rel.t2ID
        ,Rel.t1ID
 --       ,MAX(Rel.t1ID)AS t1ID 
-- the MAX returns an arbitrary ID, what i need is: 
      ,ROW_NUMBER()OVER(Partition By Rel.t2ID Order By Price DESC)As PriceList
        ,SUM(Price)OVER(PARTITION BY Rel.t2ID) AS Price
        FROM @t1 T1 
        INNER JOIN @relation Rel ON Rel.t1ID=T1.ID
--        GROUP BY Rel.t2ID
)AS T1Sum ON  T1Sum.t2ID = T2.ID
INNER JOIN @t1 T1 ON T1Sum.t1ID=T1.ID
where t1Sum.PriceList = 1

Yang memberikan set hasil yang diminta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan emoji / emotikon ke tabel SQL Server

  2. SQL Server, temukan urutan nilai yang berubah-ubah

  3. T-SQL:masalah dengan string concat

  4. Apa spesifikasi format Tanggal Heksadesimal di SQL server?

  5. Menyimpan file dalam database yang bertentangan dengan sistem file?