----------批号生成问题,百分求解-----------
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