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

Pobieranie maksymalnej wartości z wierszy i dołączanie do innej tabeli

W tym, co napisałeś, brakowało litery A w klauzuli od, więc nie jest do końca jasne, gdzie popełniłeś błąd, ale to powinno działać

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

Zobacz, jak działa tutaj

Alternatywnie możesz zamiast tego użyć numeru wiersza

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

Zobacz, jak działa tutaj



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy MAMP powinien zwrócić ::1 jako IP na hoście lokalnym?

  2. Jak wykonać procedurę składowaną raz dla każdego wiersza zwróconego przez zapytanie?

  3. Jaki jest najlepszy sposób na skrócenie daty w SQL Server?

  4. Przejrzyj swoje ustawienia sesji za pomocą SESSIONPROPERTY() w SQL Server

  5. Co stanie się z identyfikatorem klucza podstawowego, gdy przekroczy limit?