2013-01-31 71 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