请教一个问题SQL的问题,谢谢
测试数据/*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 */
;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]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 行受影响)**/
[解决办法]
创建临时表 用来生成 流水号
CREATE TABLE [dbo].[t_id] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL
)
insert t_id
select distinct name from table order by id
表报
select 'DH'+right(convert(char(8),getdate(),112),6)+right('000'+cast(b.id as varchar(10)),3)
from table a,t_id b
where a.name=b.name
[解决办法]
create table rc(ID int, 日期 date, 客户名称 varchar(100), 流水单号 varchar(20))insert into rc(ID,日期,客户名称)select 1, '2012/7/18', '东莞港有限公司广州分公司' union allselect 2, '2012/7/18', '佛山彤鞋业有限公司' union allselect 3, '2012/7/18', '佛山彤鞋业有限公司' union allselect 4, '2012/7/18', '佛山彤鞋业有限公司' union allselect 5, '2012/7/18', '广东发克汽车用品有限公司' union allselect 6, '2012/7/18', '广东发克汽车用品有限公司' union allselect 7, '2012/7/18', '广东发克汽车用品有限公司' union allselect 8, '2012/7/18', '广东发克汽车用品有限公司' union allselect 9, '2012/7/18', '广东发克汽车用品有限公司' union allselect 10, '2012/7/18', '广州南大酒店有限公司' union allselect 11, '2012/7/18', '广州南大酒店有限公司' union allselect 12, '2012/7/18', '河源市源区宇华印刷厂' union allselect 13, '2012/7/18', '河源市源区宇华印刷厂' union allselect 14, '2012/7/18', '河源市源区宇华印刷厂' union allselect 15, '2012/7/18', '河源市源区宇华印刷厂' union allselect 16, '2012/7/18', '河源市源区宇华印刷厂' union allselect 17, '2012/7/18', '河源市源区宇华印刷厂' union allselect 18, '2012/7/18', '河源市源区宇华印刷厂'update aset a.流水单号=b.lsdhfrom rc ainner join(select ID,'DH'+substring(convert(varchar(20),日期,112),3,6)+replicate('0',3-len(rtrim(dense_rank() over(order by 客户名称))))+rtrim(dense_rank() over(order by 客户名称)) 'lsdh'from rc) b on a.ID=b.IDselect * from rc/*ID 日期 客户名称 流水单号----------- ---------- ---------------------------------------- --------------------1 2012-07-18 东莞港有限公司广州分公司 DH1207180012 2012-07-18 佛山彤鞋业有限公司 DH1207180023 2012-07-18 佛山彤鞋业有限公司 DH1207180024 2012-07-18 佛山彤鞋业有限公司 DH1207180025 2012-07-18 广东发克汽车用品有限公司 DH1207180036 2012-07-18 广东发克汽车用品有限公司 DH1207180037 2012-07-18 广东发克汽车用品有限公司 DH1207180038 2012-07-18 广东发克汽车用品有限公司 DH1207180039 2012-07-18 广东发克汽车用品有限公司 DH12071800310 2012-07-18 广州南大酒店有限公司 DH12071800411 2012-07-18 广州南大酒店有限公司 DH12071800412 2012-07-18 河源市源区宇华印刷厂 DH12071800513 2012-07-18 河源市源区宇华印刷厂 DH12071800514 2012-07-18 河源市源区宇华印刷厂 DH12071800515 2012-07-18 河源市源区宇华印刷厂 DH12071800516 2012-07-18 河源市源区宇华印刷厂 DH12071800517 2012-07-18 河源市源区宇华印刷厂 DH12071800518 2012-07-18 河源市源区宇华印刷厂 DH120718005(18 row(s) affected)*/