读书人

-批号生成有关问题百分求解-

发布时间: 2012-02-24 16:30:39 作者: rapoo

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

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]% '
---------------------
1a221OK742周完成0742
2a231Ok待定未确定周次NULL
3a992OK731周0799
4a992OK732周0799
5a992OK799周0799
6a271No123742周N0742
7a281No521712周 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 select 3, 'a99 ', 2, 'OK ', '731周 '


union all select 4, 'a99 ', 2, 'OK ', '732周 '
union all select 5, 'a99 ', 2, 'OK ', '799周 '
union all select 6, 'a27 ', 1, 'No123 ', '742周 '
union all select 7, 'a28 ', 1, 'No521 ', '712周 '

go
update tb
set PiHao = (case substring(Cdesc,1,1) when 'N ' then 'N ' else ' ' end) + '0 ' + substring((select max(MyWeek) from tb as t where AID=tb.AID and BID=tb.BID),1,3)
where PiHao is null and MyWeek like '[0-9][0-9][0-9]% '

select * from tb

go
drop table tb

读书人网 >SQL Server

热点推荐