SQL Server group by子句并显示所有列

时间:2015-05-28 08:40:27

标签: sql sql-server

我在SQL Server中有一个这样的表:

Id Name Grade Marks 
1  ABC  8     150
1  DEF  9     200
2  GHI  10    180
2  JKL  8     155
3  MNO  9     150
3  PQR  10    200     

我需要为每个Marks以及GradeID获取最高Name。 输出应该是这样的:

Id  Name   Grade  Marks
2   JKL    8      155
1   DEF    9      200
3   PQR    10     200 

这就是我试过的

从T1选择ID,名称,等级,标记 中的标记(按等级从T1组中选择最大(标记))

这是如此不成熟的尝试,我在这里发布它并且我不知道其他方法来尝试它....

4 个答案:

答案 0 :(得分:4)

你可以这样做:

;with cte as
(
  select 
    *, 
    row_number() over(partition by Grade order by Marks desc) rn
  from TableName
)
select * from cte where rn = 1

答案 1 :(得分:0)

$this->email->set_mailtype("html");

答案 2 :(得分:0)

SELECT 
    t1.ID
    ,t1.NAME
    ,t1.Grade
    ,t1.Marks
FROM t1
INNER JOIN (
    SELECT Grade
        ,max(Marks) AS highest_marks
    FROM t1
    GROUP BY Grade
    ) AS TEMP ON t1.Marks = TEMP.highest_marks
    AND t1.Grade = TEMP.Grade

答案 3 :(得分:-1)

这不是最好的方法,但你可以试试这个。!!

with cte as
(
select id,max(marks)as m from test group by id
)
select t.id,t.sub,t.grade,t.marks from test t 
inner join cte c on c.id=t.id and t.marks=c.m

working demo