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

Nhận giá trị tối đa từ các hàng và tham gia vào một bảng khác

Những gì bạn viết bị thiếu A trong mệnh đề from nên nó không hoàn toàn rõ ràng là bạn đã sai ở đâu nhưng điều này sẽ hoạt động

select 
       B.Id, 
       B.FileName,
       A.Name
FRom B
     INNER JOIN A
     ON A.id = B.id
    INNER JOIN ( 
          select A.Id, MAX(A.Rank)as ExpertRank 
          from A 
          group by A.Id
     ) as NewA 
    ON a.Id = NewA.ID 
       AND a.Rank = NewA.ExpertRank

Xem nó hoạt động ở đây

Ngoài ra, bạn có thể sử dụng rownumber thay thế

WITH CTE AS 
(
   SELECT ID, 
          RANK,
          Name,
          ROW_NUMBER() OVER (PARTITION BY ID ORDER BY RANK DESC) rn
   FROM A
)
SELECT b.Id b.FileName,cte.Name
FROM
   b
   INNER JOIN cte 
   ON b.id = cte.id
      and cte.rn = 1

Xem nó hoạt động ở đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nối các giá trị hàng T-SQL

  2. Không thể sử dụng nhà cung cấp OLE DB 'Microsoft.Jet.OLEDB.4.0' cho các truy vấn phân tán

  3. Thiết lập phụ thuộc maven cho SQL Server

  4. Chuyển đổi giữa các kiểu dữ liệu ngày và giờ trong SQL Server (Ví dụ T-SQL)

  5. Tại sao ISNUMERIC ('.') Trả về 1?