日期:2014-05-18 浏览次数:20571 次
测试数据 /*ID 日期 客户名称 流水单号 int(主键) datetime varchar(100) varchar(20) 1 2012/7/18 东莞港有限公司广州分公司 2 2012/7/18 佛山彤鞋业有限公司 3 2012/7/18 佛山彤鞋业有限公司 4 2012/7/18 佛山彤鞋业有限公司 5 2012/7/18 广东发克汽车用品有限公司 6 2012/7/18 广东发克汽车用品有限公司 7 2012/7/18 广东发克汽车用品有限公司 8 2012/7/18 广东发克汽车用品有限公司 9 2012/7/18 广东发克汽车用品有限公司 10 2012/7/18 广州南大酒店有限公司 11 2012/7/18 广州南大酒店有限公司 12 2012/7/18 河源市源区宇华印刷厂 13 2012/7/18 河源市源区宇华印刷厂 14 2012/7/18 河源市源区宇华印刷厂 15 2012/7/18 河源市源区宇华印刷厂 16 2012/7/18 河源市源区宇华印刷厂 17 2012/7/18 河源市源区宇华印刷厂 18 2012/7/18 河源市源区宇华印刷厂 */ 根据相同的客户名称生成一样的流水单号(格式:DH+年+月+日+三位流水:DH120719001),需要考虑当天产生的最大流水单号在向上面累加;得出如果结果 /* ID 日期 客户名称 流水单号 int(主键) datetime varchar(100) varchar(20) 1 2012/7/18 东莞港有限公司广州分公司 DH120719001 2 2012/7/18 佛山彤鞋业有限公司 DH120719002 3 2012/7/18 佛山彤鞋业有限公司 DH120719002 4 2012/7/18 佛山彤鞋业有限公司 DH120719002 5 2012/7/18 广东发克汽车用品有限公司 DH120719003 6 2012/7/18 广东发克汽车用品有限公司 DH120719003 7 2012/7/18 广东发克汽车用品有限公司 DH120719003 8 2012/7/18 广东发克汽车用品有限公司 DH120719003 9 2012/7/18 广东发克汽车用品有限公司 DH120719003 10 2012/7/18 广州南大酒店有限公司 DH120719004 11 2012/7/18 广州南大酒店有限公司 DH120719004 12 2012/7/18 河源市源区宇华印刷厂 DH120719005 13 2012/7/18 河源市源区宇华印刷厂 DH120719005 14 2012/7/18 河源市源区宇华印刷厂 DH120719005 15 2012/7/18 河源市源区宇华印刷厂 DH120719005 16 2012/7/18 河源市源区宇华印刷厂 DH120719005 17 2012/7/18 河源市源区宇华印刷厂 DH120719005 18 2012/7/18 河源市源区宇华印刷厂 DH120719005 */
;with cte as ( select 日期,客户,'DH'+right(convert(varchar(10)),8)+ right(1001+row_number() over (order by getdate()),3) as 流水号 from tb group by 日期,客户 ) select * from tb a join cte b on a.日期 = b.日期 and a.客户 = b.客户
------解决方案--------------------
TRY
UPDATE TB SET 流水单号=B.流水单号 FROM (select [客户名称 ],('DH'+RIGHT(CONVERT(VARCHAR(8),[日期],112),4)+RIGHT(CONVERT(VARCHAR(4),(1000+rn)),3))流水单号 FROM ( select ROW_NUMBER() over(partition by [客户名称 ] order by [客户名称 ])rn,[日期],[客户名称 ] from tb)AS A)B ON TB.[客户名称 ]=B.[客户名称 ]
------解决方案--------------------
if object_id('[tb]') is not null drop table [tb] go create table [tb]([ID] varchar(9),[日期] datetime,[客户名称] varchar(24),[流水单号] varchar(11)) insert [tb] select '1','2012/7/18','东莞港有限公司广州分公司',null union all select '2','2012/7/18','佛山彤鞋业有限公司',null union all select '3','2012/7/18','佛山彤鞋业有限公司',null union all select '4','2012/7/18','佛山彤鞋业有限公司',null union all select '5','2012/7/18','广东发克汽车用品有限公司',null union all select '6','2012/7/18','广东发克汽车用品有限公司',null union all select '7','2012/7/18','广东发克汽车用品有限公司',null union all select '8','2012/7/18','广东发克汽车用品有限公司',null union all select '9','2012/7/18','广东发克汽车用品有限公司',null union all select '10','2012/7/18','广州南大酒店有限公司',null union all select '11','2012/7/18','广州南大酒店有限公司',null union all select '12','2012/7/18','河源市源区宇华印刷厂',null union all select '13','2012/7/18','河源市源区宇华印刷厂',null union all select '14','2012/7/18','河源市源区宇华印刷厂',null union all select '15','2012/7/18','河源市源区宇华印刷厂',null union all select '16','2012/7/18','河源市源区宇华印刷厂',null union all select '17','2012/7/18','河源市源区宇华印刷厂',null union all select '18','2012/7/18','河源市源区宇华印刷厂',null go UPDATE A SET A.流水单号=B.BH FROM TB A JOIN (SELECT *, BH='DH'+stuff(CONVERT(VARCHAR(8),日期,112),1,2,'')+right('000'+ltrim(DENSE_RANK() OVER(partition by CONVERT(VARCHAR(8),日期,112) order by 客户名称)),3)