2014-08-28 39 views
1

我有36個學區的學生成績數據。我正在嘗試從SQL Server查詢的幫助下獲得每個區域的前三名持有者。我prartially通過下面的查詢成功地在它:獲取職位持有者

select 
    District, 
    ROLL_NO, 
    ENG, 
    URDU, 
    MATH, 
    SCI, 
    ISL , 
    (cast(Eng as int) + CAST(urdu as int)+ CAST(MATH as int) + CAST(SCI as int) + CAST(ISL as int)) as TotalScore 
from G5G8 
ORDER BY DISTRICT, TotalScore DESC 

,該查詢產生前3名的結果,但所有其他學生也輸出,但我想從每個區(總共只獲得前3名的位置持有36×3 = 108記錄) 請建議我應該在此查詢中添加更多內容。

我使用SQL Server 2008 R2的

+0

你使用什麼數據庫? – 2014-08-28 05:09:14

+0

你能否提一下你正在使用的數據庫? – taufique 2014-08-28 05:09:18

+0

和你的表結構? – taufique 2014-08-28 05:12:14

回答

0

可能是你正在尋找類似下面的查詢,

SELECT 
    t.District, 
    t.ROLL_NO, 
    t.ENG, 
    t.URDU, 
    t.MATH, 
    t.SCI, 
    t.ISL, 
    t.TotalScore, 
FROM 
(
    SELECT 
     District, 
     ROLL_NO, 
     ENG, 
     URDU, 
     MATH, 
     SCI, 
     ISL , 
     (cast(Eng as int) + CAST(urdu as int)+ CAST(MATH as int) + CAST(SCI as int) + CAST(ISL as int))as TotalScore 
     rowid = ROW_NUMBER() OVER (PARTITION BY District ORDER BY TotalScore) 
    FROM 
     G5G8 
    ORDER BY 
     TotalScore DESC 
    GROUP BY 
     District 
) AS t 
WHERE t.rowid <= 3 
ORDER BY t.TotalScore 
GROUP BY t.District 

我能更清楚,如果我能知道你的表結構。但是,您可以查看here