create table t_yan(sheet_no varchar(20),part_no varchar(20))
insert into t_yan select 'BL1C040526001','10006321'
insert into t_yan select 'BL1C040526001','10006331'
insert into t_yan select 'BL1C040526001','O0000000000000002007'
insert into t_yan select 'BL1C040526001','10006801'
insert into t_yan select 'BL1C040526001','10006811'
insert into t_yan select 'BL1C040526001','10006831'
insert into t_yan select 'BL1C040526001','10000072'
insert into t_yan select 'BL1C040526001','10047562'
go
create function yan_f_lot(@sheet_no varchar(20),@part_no varchar(20))
returns varchar(30)
as
begin
declare @ret varchar(20)
declare @t table(id int identity(1,1),sheet_no varchar(20),part_no varchar(20)) insert into @t select * from t_yan where sheet_no=@sheet_no select
@ret=sheet_no+'_'+right('000'+rtrim(id),3)
from
@t
where
sheet_no=@sheet_no and part_no=@part_no return @ret
end
go
select sheet_no,dbo.yan_f_lot(sheet_no,part_no)as sheet_lot,part_no from t_yan
go/*
sheet_no sheet_lot part_no
-------------------- ------------------------------ --------------------
BL1C040526001 BL1C040526001_001 10006321
BL1C040526001 BL1C040526001_002 10006331
BL1C040526001 BL1C040526001_003 O0000000000000002007
BL1C040526001 BL1C040526001_004 10006801
BL1C040526001 BL1C040526001_005 10006811
BL1C040526001 BL1C040526001_006 10006831
BL1C040526001 BL1C040526001_007 10000072
BL1C040526001 BL1C040526001_008 10047562
*/drop function yan_f_lot
drop table t_yan
insert into t_yan select 'BL1C040526001','10006321'
insert into t_yan select 'BL1C040526001','10006331'
insert into t_yan select 'BL1C040526001','O0000000000000002007'
insert into t_yan select 'BL1C040526001','10006801'
insert into t_yan select 'BL1C040526001','10006811'
insert into t_yan select 'BL1C040526001','10006831'
insert into t_yan select 'BL1C040526001','10000072'
insert into t_yan select 'BL1C040526001','10047562'
go
create function yan_f_lot(@sheet_no varchar(20),@part_no varchar(20))
returns varchar(30)
as
begin
declare @ret varchar(20)
declare @t table(id int identity(1,1),sheet_no varchar(20),part_no varchar(20)) insert into @t select * from t_yan where sheet_no=@sheet_no select
@ret=sheet_no+'_'+right('000'+rtrim(id),3)
from
@t
where
sheet_no=@sheet_no and part_no=@part_no return @ret
end
go
select sheet_no,dbo.yan_f_lot(sheet_no,part_no)as sheet_lot,part_no from t_yan
go/*
sheet_no sheet_lot part_no
-------------------- ------------------------------ --------------------
BL1C040526001 BL1C040526001_001 10006321
BL1C040526001 BL1C040526001_002 10006331
BL1C040526001 BL1C040526001_003 O0000000000000002007
BL1C040526001 BL1C040526001_004 10006801
BL1C040526001 BL1C040526001_005 10006811
BL1C040526001 BL1C040526001_006 10006831
BL1C040526001 BL1C040526001_007 10000072
BL1C040526001 BL1C040526001_008 10047562
*/drop function yan_f_lot
drop table t_yan
解决方案 »
- 怎样知道 知道 周次字段包含多少个1?(101010101010101010000000000000)请前辈指导!
- 请教mssql多表联合查询效率问题
- SQL语句出问题了,大家帮我看看!谢谢了.
- asp 连接 sql server 2005
- 误删了一个数据库,怎么办?两个月的心血啊!!
- mssql2k在win2kpro上无法安装了,提示:"以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机"
- SQL Server2000启动后不到一分钟就自动停止
- 一个查询问题
- (紧急)SQL语句过长,怎么解决?
- 大家帮我分析分析!
- 通过查询分析器查找表记录提示“连接中断”
- 请教高手一个统计SQL语句的写法?解决就给分?急,。。。
用游标可以吗?
select * ,identity(int,1,1) id into # from tb order by sheet_no,part_no
select sheet_no,
sheet_lot=sheet_no+right(power(10,3)+(select count(1) from # where id<=a.id),3),
part_no
from #