日期:2014-05-18  浏览次数:20527 次

----------批号生成问题,百分求解-----------

ID       AID         BID     Cdesc             MyWeek                       PiHao

1       a22           1             OK               742周完成
2       a23           1             Ok               待定未确定周次
3       a99     2             OK               731周
4       a99     2             OK               732周
5       a99     2             OK               799周
6       a27           1             No123         742周
7       a28           1             No521         712周                 N0709

根据上面的表要生成批号(PiHao),条件如下
-----------
[如果“PiHao”为空,而且“MyWeek”是以 "3个阿拉伯数字开头 "的形式的。]-----这是首要条件
则依据“MyWeek”取前面3个字符自动生成PiHao。(具体分为以下几种情况):

(1)、如果 "AID "   + "BID "是唯一,则取“0”+“MyWeek”的前面3个字符自动生成PiHao。
(例:“742周完成”则生成“0742”;“待定未确定周次”则不需要生成PiHao。)

(2)、如果 "AID "   + "BID "不是唯一,则取“MyWeek”前3个阿拉伯数字更大的那条记录   再按条件(1)来生成pihao   。
例如
3     a99       2           OK         731周
4     a99       2           OK         732周
5     a99       2           OK         799周
则这三条记录的pihao都应该是0799
(3)按照上面的条件(1)和(2)生成的pihao,如果 "Cdesc "列是以 "N "开头的,必须在生成的pihao前面加上N。
例如记录
6     a27           1             No123         742周
最后生成的pihao   应该是   N0742

=====
条件就是上面这些了,我要做的是,写一个存储过程,然后用一个作业来调度这个存储过程,
每天晚上让系统自动生成pihao并且更新到这个表里。求这个存储过程!!谢谢。

------解决方案--------------------
create proc pro_表a as
update 表a
set PiHao=(case when left(a.Cdesc,1)= 'N ' then 'N ' else ' ' end)+ '0 ' +left((select max(left(MyWeek,3)) MyWeek from 表a b where a.AID=b.AID and a.BID=b.BID),3)
from 表a a
where a.PiHao is null and a.MyWeek like '[0-9][0-9][0-9]% '
---------------------
1 a22 1 OK 742周完成 0742
2 a23 1 Ok 待定未确定周次 NULL
3 a99 2 OK 731周 0799
4 a99 2 OK 732周 0799
5 a99 2 OK 799周 0799
6 a27 1 No123 742周 N0742
7 a28 1 No521 712周 N0709

------解决方案--------------------
--直接更新:
create table tb(ID int, AID varchar(32), BID int, Cdesc varchar(32), MyWeek varchar(32), PiHao varchar(32))
go

insert tb(ID, AID, BID, Cdesc, MyWeek) select 1, 'a22 ', 1, 'OK ', '742周完成 '
union all select 2, 'a23 ', 1, 'Ok ', '待定未确定周次 '
union all sele