日期:2014-05-19  浏览次数:20492 次

求一条更新语句-------5位排序号的处理
subject
-----------------------
01           施工员
02           预算员
03           资料员
……
-----------------------
enter
-----------------------

name       subject         examnumber
王1           施工员         0100001
王2           预算员         0200001
王3           预算员         0200002
王4           施工员         0100002
王5           施工员         0100003
王6           资料员         0300001
王7           资料员         ……
王8           预算员         ……
------------------------
现在表里面的examnumber   全是空的。
求一条更新语句来实现这个号码的更新
关键是号码后面的5位排序号。应该怎么处理。
这里不考虑数据的删除添加或者更新变动。


------解决方案--------------------
update e
set
examnumber = s.id+right( '00000 '+rtrim(select count(*) from enter where subject=e.subject and name <=e.name),5)
from
enter e,subject s
where
e.subject= s.subject
------解决方案--------------------
update e
set
examnumber = s.id+right(100000+(select count(*) from enter where subject=e.subject and name <=e.name),5)
from
enter e,subject s
where
e.subject= s.subject

------解决方案--------------------
LZ:
subject=e.subject And name <=e.name 的意思就是
subject相同在enter表中从最小的name开始统计subject出现的个数
如果你表enter有ID的话可以更好的理解...
---------------------------------------
王1 施工员 1 --施工员第一次出现
王2 预算员 1
王3 预算员 2
王4 施工员 2 --施工员第二次出现
王5 施工员 3 --施工员第三次出现
王6 资料员 1
王7 资料员 2
王8 预算员 3
------------------
Declare @subject Table(id varchar(4),subject varchar(10))
Insert @subject Select '01 ', '施工员 '
Union All Select '02 ', '预算员 '
Union All Select '03 ', '资料员 '

Declare @enter Table(name varchar(10),subject varchar(10),examnumber varchar(10))
Insert @enter Select '王1 ', '施工员 ', ' '
Union All Select '王2 ', '预算员 ', ' '
Union All Select '王3 ', '预算员 ', ' '
Union All Select '王4 ', '施工员 ', ' '
Union All Select '王5 ', '施工员 ', ' '
Union All Select '王6 ', '资料员 ', ' '
Union All Select '王7 ', '资料员 ', ' '
Union All Select '王8 ', '预算员 ', ' '
Select * From @subject
Select * From @enter

Update E
Set
examnumber = S.id+Right( '100000 '+(Select Count(*) From @enter Where subject=e.subject And name <=e.name),5)
From
@enter E
Inner Join
@subject S
On E.subject= S.subject

Select * From @enter
/*
name subject examnumber
---------- ---------- ----------
王1 施工员 0100001
王2 预算员 0200001
王3 预算员 0200002
王4 施工员 01