我正在寻找 SQL 查询来解决我遇到的问题。
我有两列 - 第一列是“员工全名”(包含全名),第二列是“工作时间”。
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 名员工具有相同的全名
最佳答案
您可以使用 CTE
使用 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-server-2008 - SQL Server 2008 中的 SQL 查询 - 分组和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635684/