【问题标题】:Query top 2 salaries in each department查询各部门工资前2名
【发布时间】:2021-03-15 02:54:01
【问题描述】:
查询:
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
错误:
消息 102,级别 15,状态 1,第 7 行
'row_rank' 附近的语法不正确。
我想查询以下列:
- 表 1:姓名、薪水、部门 ID
- 表 2:部门 ID、部门名称
【问题讨论】:
标签:
sql
sql-server
tsql
sql-server-2008
【解决方案1】:
您不能直接在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 等