表A

  • tableAID
  • tableBID

  • 表B
  • tableBID
  • 名称
  • 说明

  • 表A从两个表中的tableBID链接到表b。

    如果我想为表B中的每一行找到表A中具有最高等级的行,我将这样编写查询:
    select max(grade) from TableA group by tableBID
    

    但是,我不仅想要成绩,还想要成绩和该行的ID。

    最佳答案

    您可以尝试类似

    SELECT  a.*
    FROM    TableA a INNER JOIN
            (
                SELECT  tableBID,
                        MAX(grade) MaxGrade
                FROM    TableA
                GROUP BY tableBID
            ) B ON a.tableBID = B.tableBID AND a.grade = B.MaxGrade
    

    使用Sql Server 2005 ROW_NUMBER函数,您也可以尝试
    SELECT  tableAID,
            tableBID,
            grade
    FROM    (
                SELECT  *,
                        ROW_NUMBER() OVER (PARTITION BY tableBID ORDER BY grade DESC) RowNum
                FROM    @TableA
            ) A
    WHERE   a.RowNum = 1
    

    10-08 12:34