SQL Server中如何按数量选择职位

SQL Server中如何按数量选择职位,sql,sql-server,Sql,Sql Server,我有两张桌子: 表1-学生: +------+-------+ |Roll | Name | +------+-------+ | 1 | A | | 2 | B | | 3 | C | +------+-------+ +------+------+ | Roll | Mark | +------+------+ | 1 | 85 | | 3 | 95 | +------+------+ 表2-标记: +------+---

我有两张桌子:

表1-学生

+------+-------+
|Roll  |  Name |
+------+-------+
|   1  |    A  |
|   2  |    B  |
|   3  |    C  |
+------+-------+
+------+------+
| Roll | Mark |
+------+------+
|   1  |  85  |
|   3  |  95  |
+------+------+
表2-标记

+------+-------+
|Roll  |  Name |
+------+-------+
|   1  |    A  |
|   2  |    B  |
|   3  |    C  |
+------+-------+
+------+------+
| Roll | Mark |
+------+------+
|   1  |  85  |
|   3  |  95  |
+------+------+
输出需要:

+-------+------+-------+---------+
| Roll  | Name | Mark  |Position |
+-------+------+-------+---------+
|   1   |   A  |  85   |    2    |
|   2   |   B  |  0    |    3    |
|   3   |   C  |  95   |    1    |
+-------+------+-------+---------+

要获得输出,查询应该是什么?我认为应该使用
rank
函数,但不知道如何使用它…

使用
LEFT JOIN
连接两个表,然后使用
rank()

查询

select *, Position = rank() over(
    order by t.Mark desc
)
from(
    select t1.Roll, t1.Name, coalesce(t2.Mark, 0) as Mark
    from student t1
    left join Mark t2
    on t1.Roll = t2.Roll
)t
order by t.Name;
使用Left Join and Rank()函数

质疑


到目前为止,您编写了哪些代码?