2014-08-28 52 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