首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个有关问题SQL的有关问题,多谢

2012-08-10 
请教一个问题SQL的问题,谢谢SQL code测试数据/*ID日期客户名称流水单号int(主键)datetimevarchar(100)varc

请教一个问题SQL的问题,谢谢

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 行受影响)**/ 


[解决办法]
创建临时表 用来生成 流水号

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


[解决办法]

SQL code
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)*/ 

热点排行