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

接着昨天的问题今天再问一下
我先贴出我的测试数据出来:

bil_no voh_no sq_no voh_dd voh_flag
MK-20120204-1-00001 MK-20120204-1-00001 00001 2012-02-04 14:16:06.520 现
MK-20120204-1-00002 MK-20120204-1-00002 00002 2012-02-04 14:19:42.443 现
MK-20120204-3-00001 MK-20120204-3-00001 00001 2012-02-04 14:17:38.493 转
MK-20120206-1-00001 MK-20120206-1-00001 00001 2012-02-06 09:23:37.207 现
MK-20120206-1-00002 MK-20120206-1-00002 00002 2012-02-06 09:32:40.907 现
MK-20120206-1-00003 MK-20120206-1-00003 00003 2012-02-06 09:35:36.970 现
MK-20120206-1-00004 MK-20120206-1-00004 00004 2012-02-06 10:34:51.530 现
MK-201202-3-0001 MK-201202-3-0001 0001 2012-02-13 13:54:10.987 转
MK-201202-3-0002 MK-201202-3-0004 -0002 2012-02-13 14:19:50.327 转
MK-201202-3-0003 MK-201202-3-0006 -0003 2012-02-13 14:19:50.387 转
MK-201202-3-0004 MK-201202-3-0004 -0004 2012-02-13 14:19:50.433 转
MK-201202-3-0005 MK-201202-3-0005 -0005 2012-02-13 14:19:50.507 转
MK-201202-3-0006 MK-201202-3-0006 -0006 2012-02-13 14:19:50.560 转
MK-201202-3-0007 MK-201202-3-0007 -0007 2012-02-13 14:22:31.780 转
MK-201202-3-0008 MK-201202-3-0008 -0008 2012-02-13 14:22:43.070 转
MK-201202-3-0009 MK-201202-3-0009 -0009 2012-02-13 14:27:30.250 转
另外个表:  
ITM VOG_FLAG
1 现 
2 银 
3 转 
 
我想要的结构是 MK-201202-1-0001 比如第一条数据 VOH_NO:MK-20120204-1-00001 我要修改成:MK-201202-1-0001 需要判断它是不是这个月的第一个单据日期就 根据voh_dd这个字段来判断当前日期是不是最小的然后再进行累加,MK-201202-3-0002 MK-201202-3-0004 -0002像这条数据就改成 MK-201202-3-0002(这个功能实现了)最要是前面的更新,还有个问题如果是满月了跳到下一个月的不知道怎么处理了?

------解决方案--------------------
没怎么看明白你的需求
------解决方案--------------------
SQL code
select new_no='MK-'+convert(varchar(6),voh_dd,112)+'-'+ltrim(b.[ITM])+'-'+right('0000'+row_number() over(partition by convert(varchar(6),voh_dd,112) order by voh_dd),4) 
from [ta] a,[tb] b where a.[voh_flag]=b.[VOG_FLAG]

/*
new_no
-------------------------------
MK-201202-1-1
MK-201202-3-2
MK-201202-1-3
MK-201202-1-4
MK-201202-1-5
MK-201202-1-6
MK-201202-1-7
MK-201202-3-8
MK-201202-3-9
MK-201202-3-10
MK-201202-3-11
MK-201202-3-12
MK-201202-3-13
MK-201202-3-14
MK-201202-3-15
MK-201202-3-16

(16 行受影响)


*/