2011-05-24 145 views
1

我有公司身份证号码和雇主,现在我需要知道谁是第一,第二...雇主输入分贝。为此我需要为每个像这样添加数字:MySQL添加数字

CompanyID NameOfEmp  PositionInDB 
111   Emp1   1 
111   Emp2   2 
111   Emp3   3 
112   Emp1   1 
112   Emp2   2 
113   Emp1   1 
114   Emp1   1 
114   Emp2   2 
+2

你的问题到底是什么?你尝试过什么,没有按预期工作?你卡在哪里? – blubb 2011-05-24 08:58:13

+0

你没有真的问任何问题。有什么问题? – TJHeuvel 2011-05-24 08:58:17

+0

Emp1,Emp2等是正确写入Empx的字符串还是有所不同? – Marco 2011-05-24 08:59:02

回答

1

表格以未定义的顺序存储。为了定义一个职位,你必须自己定义一个订单。此示例根据员工的姓名分配订单。它将alfabetically员工人数每家公司:

select * 
,  (
     select count(*) + 1 
     from YourTable yt2 
     where yt2.CompanyID = yt1.CompanyID 
       and yt2.NameOfEmp < yt1.NameOfEmp 
     ) as PositionInDb 
from YourTable yt1 

既然你使用MySQL,你也可以使用一个变量:

set @num = 1; 

select CompanyID 
,  NameOfEmp 
,  @num := if(@last_comp = CompanyID, @num + 1, 1) as PositionInDb 
,  @last_comp := CompanyID as dummy 
from YourTable 
order by 
     CompanyID 
,  NameOfEmp 

变量是快速和容易的,但不便于携带,而且大多数DBA的反感他们。

+0

+1使用'可变方法' – diEcho 2011-05-24 09:24:36

+0

谢谢你们,这正是我需要的。 – Pooky 2011-05-24 09:40:50