2013-01-31 61 views
2

我正在寻找SQL查询来解决我遇到的问题。SQL Server 2008中的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名员工提供相同的全名

+1

最好在http://sqlfiddle.com中描述你的数据库结构。然后,我们可以更轻松地为您制定解决方案。 –

+0

员工的第一个姓氏不在不同的列中?那会让你的生活变得更加生气。 – Hiten004

+0

我知道,但它不是:) – Ron

回答

3

可以使用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 Fiddle with Demo

理想情况下,您需要对数据库进行规范化处理,以将姓名和姓氏放在单独的列中。

+0

它的工作原理!多么优秀的工作:) – Ron