Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để kết hợp GROUP BY và ROW_NUMBER?

Chà, các câu trả lời khác trông phức tạp - vì vậy tôi hy vọng mình đã không bỏ lỡ điều gì đó rõ ràng.

Bạn có thể sử dụng OVER / PARTITION BY chống lại các tổng hợp và sau đó chúng sẽ thực hiện nhóm / tổng hợp mà không có GROUP BY mệnh đề. Vì vậy, tôi vừa sửa đổi truy vấn của bạn thành:

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

Điều này mang lại tập hợp kết quả được yêu cầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để truy vấn đối tượng Datetime theo ngày?

  2. Vòng lặp trên bảng (Không sử dụng con trỏ) để nối dữ liệu

  3. 5 Lợi ích của việc giám sát hiệu suất cơ sở dữ liệu chủ động

  4. cây con sql cha với thứ tự sắp xếp

  5. Làm cách nào để sử dụng tên bảng SQL Server trong truy vấn chọn với một biến?