接着昨天的问题今天再问一下

悔说话的哑巴 2012-02-22 07:38:25
我先贴出我的测试数据出来:

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(这个功能实现了)最要是前面的更新,还有个问题如果是满月了跳到下一个月的不知道怎么处理了?
...全文
218 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 beirut 的回复:]

SQL code
update
a
set
voh_no='MK-'
+convert(varchar(6),voh_dd,112)
+'-'+ltrim(b.[ITM])
+'-'+right('0000'+ltrim
(
row_number()
over(partition by convert(varchar(6),voh_dd,112),a.[voh_f……
[/Quote]
这个是错的。。。




;with t as(
select new_no='MK-'
+convert(varchar(6),voh_dd,112)
+'-'+ltrim(b.[ITM])
+'-'+right('0000'+ltrim
(
row_number()
over(partition by convert(varchar(6),voh_dd,112),a.[voh_flag] order by voh_dd)
),4)
,[voh_no] ,[sq_no],[voh_dd], [voh_flag]
from [ta] a,[tb] b where a.[voh_flag]=b.[VOG_FLAG]
)
update t set [voh_no]=new_no
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
update  
a
set
voh_no='MK-'
+convert(varchar(6),voh_dd,112)
+'-'+ltrim(b.[ITM])
+'-'+right('0000'+ltrim
(
row_number()
over(partition by convert(varchar(6),voh_dd,112),a.[voh_flag] order by voh_dd)
),4)
from [ta] a,[tb] b
where a.[voh_flag]=b.[VOG_FLAG]

黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
new_no 就是新生成的的号啊,你看这个对不对,对了你直接复制过去update 啊
悔说话的哑巴 2012-02-22
  • 打赏
  • 举报
回复
VOH_NO这个字段
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hetl_1985 的回复:]

MK-201202-3-0001 MK-20120204-3-00001 00001 像这样的也要处理成 MK-201202-3-0001
[/Quote]

处理了啊
悔说话的哑巴 2012-02-22
  • 打赏
  • 举报
回复
MK-201202-3-0001 MK-20120204-3-00001 00001 像这样的也要处理成 MK-201202-3-0001
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复

select new_no='MK-'+convert(varchar(6),voh_dd,112)+'-'+ltrim(b.[ITM])+'-'+right('0000'+ltrim(row_number() over(partition by convert(varchar(6),voh_dd,112),a.[voh_flag] order by voh_dd)),4)
,[voh_no] ,[sq_no],[voh_dd], [voh_flag]
from [ta] a,[tb] b where a.[voh_flag]=b.[VOG_FLAG]

/*
new_no voh_no sq_no voh_dd voh_flag
------------------------------- ------------------- ----- ----------------------- --------
MK-201202-1-0001 MK-20120204-1-00001 00001 2012-02-04 14:16:06.520 现
MK-201202-1-0002 MK-20120204-1-00002 00002 2012-02-04 14:19:42.443 现
MK-201202-1-0003 MK-20120206-1-00001 00001 2012-02-06 09:23:37.207 现
MK-201202-1-0004 MK-20120206-1-00002 00002 2012-02-06 09:32:40.907 现
MK-201202-1-0005 MK-20120206-1-00003 00003 2012-02-06 09:35:36.970 现
MK-201202-1-0006 MK-20120206-1-00004 00004 2012-02-06 10:34:51.530 现
MK-201202-3-0001 MK-20120204-3-00001 00001 2012-02-04 14:17:38.493 转
MK-201202-3-0002 MK-201202-3-0001 0001 2012-02-13 13:54:10.987 转
MK-201202-3-0003 MK-201202-3-0004 -0002 2012-02-13 14:19:50.327 转
MK-201202-3-0004 MK-201202-3-0006 -0003 2012-02-13 14:19:50.387 转
MK-201202-3-0005 MK-201202-3-0004 -0004 2012-02-13 14:19:50.433 转
MK-201202-3-0006 MK-201202-3-0005 -0005 2012-02-13 14:19:50.507 转
MK-201202-3-0007 MK-201202-3-0006 -0006 2012-02-13 14:19:50.560 转
MK-201202-3-0008 MK-201202-3-0007 -0007 2012-02-13 14:22:31.780 转
MK-201202-3-0009 MK-201202-3-0008 -0008 2012-02-13 14:22:43.070 转
MK-201202-3-0010 MK-201202-3-0009 -0009 2012-02-13 14:27:30.250 转

(16 行受影响)


*/


刚才那个不对,这个呢 还是曲解你的意思了
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
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 行受影响)


*/


这样的号对不对啊
悔说话的哑巴 2012-02-22
  • 打赏
  • 举报
回复
我要的结果是: voh_no这个字段是这样的格式:MK-201202-1-0001 (1是根据acc_voh_type 的ITM和voh_flag
来判断) sq_no :0001就是VOH_no的最后4个数字
黄_瓜 2012-02-22
  • 打赏
  • 举报
回复
哑巴,你要什么结果啊
  • 打赏
  • 举报
回复
没怎么看明白你的需求
悔说话的哑巴 2012-02-22
  • 打赏
  • 举报
回复
有空的朋友帮忙看看吧
悔说话的哑巴 2012-02-22
  • 打赏
  • 举报
回复
这个是昨天写的:
alter proc test
as
begin
update
a
set
voh_no=
'MK'+'-'+
convert(char(6),VOH_DD,112)+'-'+
ltrim(b.[ITM])+'-'+
right('0000'+ltrim(isnull((select count(1) from acc_voh c where
c.bil_no<=a.bil_no and c.voh_flag=a.voh_flag),0)) ,4),

sq_no=REPLACE(right('0000'+ltrim(isnull((select count(1) from acc_voh c where
c.bil_no<=a.bil_no and c.voh_flag=a.voh_flag ),0)) ,4),'-','')
from
acc_voh a ,acc_voh_type b
where
a.voh_flag=b.voh_flag
end

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧