计算方法:大类编号 + ‘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.   

    看楼主的样子,应该只考虑大类?
    按楼上数据,去掉 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
      

  2.   

    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
      

  3.   

    sjsjsjsjsj () ,,以上高手的回答可以吗?>???????????