查询每个部门前2名的薪水

Query top 2 salaries in each department

查询:

select *, row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
from dbo.d as a
inner join dbo.e as b on a.[Dept id] = b.[Dept id]
row_rank < 3

错误:

Msg 102, Level 15, State 1, Line 7 Incorrect syntax near 'row_rank'.

我想查询以下列:

您不能在 where 子句中直接引用计算列。使用 CTE 或子查询。

with cte as (
    select a.Name, a.salary a.[Dept id], b.Dept_Name
        , row_number() over (partition by b.[Dept Name] order by a.salary) as row_rank
    from dbo.d as a
    inner join dbo.e as b on a.[Dept id] = b.[Dept id]
)
select *
from cte
where row_rank < 3;

您不需要两个表中的 [dept id],因为它们是相同的。还建议使用有意义的别名为您的表起别名,而不仅仅是 a、b 等