每个父记录对子记录重新编号

时间:2019-06-03 07:08:13

标签: sql-server

我有一个父子表,如下所示:

 Parent Table

 CourseId  |  CourseName
 1         |  MVC training

Child Table

Id  | StudentId  | CourseId  | AttnDate 
1   | 33         | 1         | 6/1/2019
2   | 33         | 1         | 6/2/2019
3   | 33         | 1         | 6/3/2019
4   | 34         | 1         | 6/1/2019
5   | 34         | 1         | 6/2/2019
6   | 34         | 1         | 6/3/2019

我在google上搜索了使用行号进行搜索,但未能成功。

不知道

我希望最终结果如下表所示。我需要将33更改为1,将34更改为2:

Id  | StudentId  | CourseId  | AttnDate 
1   | 1         | 1         | 6/1/2019
2   | 1         | 1         | 6/2/2019
3   | 1         | 1         | 6/3/2019
4   | 2         | 1         | 6/1/2019
5   | 2         | 1         | 6/2/2019
6   | 2         | 1         | 6/3/2019

2 个答案:

答案 0 :(得分:1)

尝试使用DENSE_RANK()

    SELECT Id, 
         DENSE_RANK()OVER( ORDER BY StudentId) AS StudentId,
         CourseId,
         AttnDate
    FROM Parent p 
    INNER JOIN Child c  ON c.CourseId = p.CourseId
    ORDER bY  p.ID

答案 1 :(得分:0)

为什么需要“将33更改为1并将34更改为2”?是否出于为分区中每个不同的行分配唯一的等级编号的目的(由StudentId分组的数据)? 如果是这样,则您需要SQL Server DENSE_RANK排名功能

SELECT *, 
DENSE_RANK() OVER(ORDER BY c.StudentId) AS RowNumberRank -- here is your rank number (StudentId in your final result)
FROM  Child c