【问题标题】: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 等

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2021-07-24
      • 2022-11-10
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多