行的排名取决于重复的数量

时间:2017-10-11 09:17:53

标签: sql sql-server

是否可以在MSSQL中执行此操作?我已经搜索了内置函数的排名,但它没有得到这种排名。

Term    Course_ID  Description   Grade   Rank
1601    001173     Gen Math       76      1 
1601    001235     21st Cent      79      1
1601    001235     21st Cent      73      2
1601    001247     Philosophy     81      1
1601    001247     Philosophy     71      2
1601    001259     Oral Com       76      1
1601    001548     English        85      1

我必须将该特定Course_Id的第一个记录的等级设置为1并继续计数直到最后一个副本,并重置为1以用于另一个course_ID。

提前致谢。

3 个答案:

答案 0 :(得分:2)

使用Row_Number()功能代替Rank(),如下所示:

SELECT *,
       ROW_NUMBER() OVER(PARTITION BY Course_ID ORDER BY Course_ID) Rank
FROM <table_name>;

输出

Term    Course_ID  Description   Grade   Rank
1601    001173     Gen Math       76      1 
1601    001235     21st Cent      79      1
1601    001235     21st Cent      73      2
1601    001247     Philosophy     81      1
1601    001247     Philosophy     71      2
1601    001259     Oral Com       76      1
1601    001548     English        85      1

答案 1 :(得分:1)

DECLARE @Test TABLE (
    Term        INT,
    Course_ID   VARCHAR(32),
    Description VARCHAR(100),
    Grade       INT
)

INSERT @Test
VALUES
    (1601,    '001173',     'Gen Math',       76),
    (1601,    '001235',     '21st Cent',      79),
    (1601,    '001235',     '21st Cent',      73),
    (1601,    '001247',     'Philosophy',     81),
    (1601,    '001247',     'Philosophy',     71),
    (1601,    '001259',     'Oral Com',       76),
    (1601,    '001548',     'English',        85)

SELECT ROW_NUMBER() OVER (PARTITION BY Course_ID ORDER BY Term) [Rank], Term, Course_ID, Description, Grade
FROM @Test

答案 2 :(得分:0)

我认为这可以通过Rank函数Partition By使用Course_ID来解决。请参阅我的示例here

相关问题