2

我正在寻找 SQL 查询来解决我遇到的问题。

我有 2 列 - 第一列是“员工全名”(包含全名),第二列是“小时”。

Employee Full Name | Hours | grading
-------------------------------------
john ran             122
john medi            177
john mat             138
jack rom             66
jack ton             88

我想通过以下方式使用“评分”列更新数据库:

按员工的名字对员工进行分组,然后按工作时间对他们进行评分(按升序排列)(具有特定名字的员工的最高工作时间)得到 1 级,第二个 2 级等...)。

结果应该是这样的:

Employee Full Name | Hours | grading
------------------------------------
john ran             122      3
john medi            177      1
john mat             138      2
jack rom             66       2
jack ton             88       1

没有2名同名员工

4

1 回答 1

3

您可以使用 aCTE来执行此更新row_number()

;with cte as
(
  select *,
    row_number() 
      over(partition by substring([EMPLOYEE FULL NAME], 1, charindex(' ', [EMPLOYEE FULL NAME])) 
           order by hours desc) rn
  from yourtable
)
update cte
set grading = rn;

请参阅带有演示的 SQL Fiddle

理想情况下,您将希望规范化您的数据库,使名字和姓氏在不同的列中。

于 2013-01-31T22:03:49.937 回答