计算方法:大类编号 + ‘0’ + 小类编号 +大类开始的第一个编号为001 逐步增加,直到本大类编号的最后一个产品按照楼主的计算规则,怎么会生成如下数据???
大类编号 小类编号 产品编号
1 2 101004 -->> 前三位应该为102
1 3 101005 -->> 前三位应该为103
2 2 201004 -->> ...... 202
2 3 201005 -->>....... 203我觉得应该是这样的.create table sjsjsjsj
(大类编号 int,
小类编号 int,
产品编号 varchar(6))insert into sjsjsjsj (大类编号,小类编号)
select 1 , 1 union all
select 1 , 1 union all
select 1 , 1 union all
select 1 , 2 union all
select 1 , 3 union all
select 2 , 1 union all
select 2 , 1 union all
select 2 , 1 union all
select 2 , 2 union all
select 2 , 3 union all
select 5 , 3select identity(int) as idid,* into #t from sjsjsjsj
select * from #tselect 大类编号,小类编号,cast(大类编号 as varchar)+'0'+cast(小类编号 as varchar)
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and 小类编号=a.小类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a----------------------------
1 1 101001
1 1 101002
1 1 101003
1 2 102001
1 3 103001
2 1 201001
2 1 201002
2 1 201003
2 2 202001
2 3 203001
5 3 503001(所影响的行数为 11 行)truncate table sjsjsjsjinsert into sjsjsjsj
select 大类编号,小类编号,产品编号 from
(select 大类编号,小类编号,cast(大类编号 as varchar)+'0'+cast(小类编号 as varchar)
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and 小类编号=a.小类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a) adrop table #t
大类编号 小类编号 产品编号
1 2 101004 -->> 前三位应该为102
1 3 101005 -->> 前三位应该为103
2 2 201004 -->> ...... 202
2 3 201005 -->>....... 203我觉得应该是这样的.create table sjsjsjsj
(大类编号 int,
小类编号 int,
产品编号 varchar(6))insert into sjsjsjsj (大类编号,小类编号)
select 1 , 1 union all
select 1 , 1 union all
select 1 , 1 union all
select 1 , 2 union all
select 1 , 3 union all
select 2 , 1 union all
select 2 , 1 union all
select 2 , 1 union all
select 2 , 2 union all
select 2 , 3 union all
select 5 , 3select identity(int) as idid,* into #t from sjsjsjsj
select * from #tselect 大类编号,小类编号,cast(大类编号 as varchar)+'0'+cast(小类编号 as varchar)
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and 小类编号=a.小类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a----------------------------
1 1 101001
1 1 101002
1 1 101003
1 2 102001
1 3 103001
2 1 201001
2 1 201002
2 1 201003
2 2 202001
2 3 203001
5 3 503001(所影响的行数为 11 行)truncate table sjsjsjsjinsert into sjsjsjsj
select 大类编号,小类编号,产品编号 from
(select 大类编号,小类编号,cast(大类编号 as varchar)+'0'+cast(小类编号 as varchar)
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and 小类编号=a.小类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a) adrop table #t
按楼上数据,去掉 and 小类编号=a.小类编号select 大类编号,小类编号,cast(大类编号 as varchar)+'0'+cast(小类编号 as varchar)
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a--结果:
大类编号 小类编号 产品编号
----------- ----------- -------------------------------------------------------------------
1 1 101001
1 1 101002
1 1 101003
1 2 102004
1 3 103005
2 1 201001
2 1 201002
2 1 201003
2 2 202004
2 3 203005
5 3 503001
+right(cast(1000+(select count( 大类编号+小类编号)+1 from #t where 大类编号=a.大类编号 and idid<a.idid) as varchar),3)
as 产品编号
from #t a--结果:
大类编号 小类编号 产品编号
----------- ----------- -------------------------------------------------------------------
1 1 101001
1 1 101002
1 1 101003
1 2 102004
1 3 103005
2 1 201001
2 1 201002
2 1 201003
2 2 202004
2 3 203005
5 3 503001