- SQL code
测试数据/*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 东莞港有限公司广州分公司 DH1207190012 2012/7/18 佛山彤鞋业有限公司 DH1207190023 2012/7/18 佛山彤鞋业有限公司 DH1207190024 2012/7/18 佛山彤鞋业有限公司 DH1207190025 2012/7/18 广东发克汽车用品有限公司 DH1207190036 2012/7/18 广东发克汽车用品有限公司 DH1207190037 2012/7/18 广东发克汽车用品有限公司 DH1207190038 2012/7/18 广东发克汽车用品有限公司 DH1207190039 2012/7/18 广东发克汽车用品有限公司 DH12071900310 2012/7/18 广州南大酒店有限公司 DH12071900411 2012/7/18 广州南大酒店有限公司 DH12071900412 2012/7/18 河源市源区宇华印刷厂 DH12071900513 2012/7/18 河源市源区宇华印刷厂 DH12071900514 2012/7/18 河源市源区宇华印刷厂 DH12071900515 2012/7/18 河源市源区宇华印刷厂 DH12071900516 2012/7/18 河源市源区宇华印刷厂 DH12071900517 2012/7/18 河源市源区宇华印刷厂 DH12071900518 2012/7/18 河源市源区宇华印刷厂 DH120719005 */
就这么多分了.
------解决方案--------------------
我怎么感觉不是 19 呢?是 18 ?
- SQL code
;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
- SQL code
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.[客户名称 ]
------解决方案--------------------
- SQL code
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([ID] varchar(9),[日期] datetime,[客户名称] varchar(24),[流水单号] varchar(11))insert [tb]select '1','2012/7/18','东莞港有限公司广州分公司',null union allselect '2','2012/7/18','佛山彤鞋业有限公司',null union allselect '3','2012/7/18','佛山彤鞋业有限公司',null union allselect '4','2012/7/18','佛山彤鞋业有限公司',null union allselect '5','2012/7/18','广东发克汽车用品有限公司',null union allselect '6','2012/7/18','广东发克汽车用品有限公司',null union allselect '7','2012/7/18','广东发克汽车用品有限公司',null union allselect '8','2012/7/18','广东发克汽车用品有限公司',null union allselect '9','2012/7/18','广东发克汽车用品有限公司',null union allselect '10','2012/7/18','广州南大酒店有限公司',null union allselect '11','2012/7/18','广州南大酒店有限公司',null union allselect '12','2012/7/18','河源市源区宇华印刷厂',null union allselect '13','2012/7/18','河源市源区宇华印刷厂',null union allselect '14','2012/7/18','河源市源区宇华印刷厂',null union allselect '15','2012/7/18','河源市源区宇华印刷厂',null union allselect '16','2012/7/18','河源市源区宇华印刷厂',null union allselect '17','2012/7/18','河源市源区宇华印刷厂',null union allselect '18','2012/7/18','河源市源区宇华印刷厂',nullgoUPDATE ASET A.流水单号=B.BHFROM TB AJOIN (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) FROM TB) BON A.ID=B.IDGOSELECT * FROM TB/**ID 日期 客户名称 流水单号--------- ----------------------- ------------------------ -----------1 2012-07-18 00:00:00.000 东莞港有限公司广州分公司 DH1207180012 2012-07-18 00:00:00.000 佛山彤鞋业有限公司 DH1207180023 2012-07-18 00:00:00.000 佛山彤鞋业有限公司 DH1207180024 2012-07-18 00:00:00.000 佛山彤鞋业有限公司 DH1207180025 2012-07-18 00:00:00.000 广东发克汽车用品有限公司 DH1207180036 2012-07-18 00:00:00.000 广东发克汽车用品有限公司 DH1207180037 2012-07-18 00:00:00.000 广东发克汽车用品有限公司 DH1207180038 2012-07-18 00:00:00.000 广东发克汽车用品有限公司 DH1207180039 2012-07-18 00:00:00.000 广东发克汽车用品有限公司 DH12071800310 2012-07-18 00:00:00.000 广州南大酒店有限公司 DH12071800411 2012-07-18 00:00:00.000 广州南大酒店有限公司 DH12071800412 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800513 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800514 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800515 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800516 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800517 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH12071800518 2012-07-18 00:00:00.000 河源市源区宇华印刷厂 DH120718005(18 行受影响)**/