是否可以在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。
提前致谢。
答案 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