【SQL server】几个字段的拼接,实现字段的自增

本文介绍了如何在SQL Server中通过拼接多个字段并实现自增效果,用于生成特定格式的图号。首先从表A获取前三个字段,然后使用DECLARE变量并更新其值来实现自增,最后通过CAST转换所有字段为相同数据类型。具体应用包括当字段1为BB时,图号格式为'字段1字段3.字段2.字段4';当字段1为AA时,图号格式为'字段3字段1.字段2.字段4'。

目标:将几段数字拼接为图号

条件:现有四个字段,前三个可通过表A获取,第四个字段为自增字段

思路:1.通过select 表A 获取前三个字段

          2.通过declare @变量 先赋初始值给该字段,在通过update @变量+1 来实现该字段的自增

          3.使用cast(字段 as  数据类型)将四个字段类型设置为同一个

表1

ID名称数值
1字段1AA
2字段1AA
3字段1BB
4字段1BB
5字段2001
6字段2002
7字段2003
8字段2004
9字段31
10字段32
11字段31
12字段32

表2

IDname字段1字段2字段3字段4图号
1A115910001AA.001.1000
2A2261010012AA.002.1001
3B137113000BB1.001.3000
4B248123001BB2.002.3001

当字段1=BB时,要得到的图号为:字段1字段3.字段2.字段4
当字段1=AA时,要得到的图号为:字段3字段1.字段2.字段4

--实现字段4赋初始值以及自增
declare @num1 varchar(4),@num2 varchar(4)
set @num1=(select 字段4 from 表2 where ID in (select max(ID) from 表2 where 字段1=AA and 字段4!=' ' )) 
set @num2=(select '0'+RTRIM(LTRIM(str(字段4))) from 表2 where ID in (select max(ID) from 表2 where 字段1=BB and 字段4!=' ' )) 
update 表2 set 字段4=(case when (select count(1) from 表2 where 字段1=AA)!=1 then  @num1+1
                                 else  '1000' end) where 字段1=AA  and 字段4=' ' or 字段4 is null 
update 表2 set 字段4=(case when (select count(1) from 表2 where 字段1=BB)!=1 then  '0'+RTRIM(LTRIM(str(@num2+1)))
                                 else  '0350' end) where 字段1=BB and 字段4=' ' or 字段4 is null 
--图号拼接
drop table th
select a.字段1 as num1,b.字段2 as num2,c.字段3 as num3 ,d.字段4 as order_num,d.id into th
from 表1 a,表1 b,表1 c,表2 d 
where a.id=d.字段1 and b.id=d.字段2 and c.id=d.字段3 
drop table th1
SELECT CAST(num1 AS VARCHAR(10)) + CAST(num2 AS VARCHAR(10))+'.'+ CAST(num3 AS VARCHAR(10))+'.' + CAST(order_num AS VARCHAR(10) ) as num,num1 as name ,id into th1 FROM th where num1!='AA'
update a set a.图号=b.num from 表2 a,th1 b where a.id=b.id
drop table th1
SELECT CAST(num2 AS VARCHAR(10)) + CAST(num1 AS VARCHAR(10))+CAST(num3 AS VARCHAR(10))+ CAST(order_num AS VARCHAR(10) ) as num,num1 as name ,id into th1 FROM th where num1='AA'
update a set a.图号=b.num from 表2 a,th1 b where a.id=b.id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值