我有一个父子表,如下所示:
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
答案 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