2015-05-28 67 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