2015-05-28 42 views
-4

我在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  

我需要与IDName沿取每个Grade最高Marks。 输出应该是这样的:

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

这是我试过

选择ID,名称,等级,标志着从T1 其中标记(选择T1组最高(标记)由级)

这是太不成熟了尝试,我力后在这里,我不知道其他的方法来试试吧....

+4

做出的尝试。 –

+2

请提一下你试图解决这个问题的方式?这看起来像你的功课。我们不能做你的功课。 – Karthikeyan

+1

有些东西可以帮助您开始阅读[ROW_NUMBER()](https://msdn.microsoft.com/zh-CN/library/ms186734.aspx) – ughai

回答

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 
+0

谢谢,这解决了我的问题 – Sunil

0
select ID, Name, Grade, Mark 
FROM (select ID, Name, Grade, Mark, 
     Row_number() over(partition by Grade order by mark desc) AS RN 
     From <Table>) A 
WHERE RN = 1 
4

你可以不喜欢它:

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

这看起来很正确,所以我已经up'd它。 –

+0

对不起,误读了这个问题。我会改变我的downvote –

-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