create table #T(aID varchar(10),mc varchar(10),dw varchar(10),sl int,bm varchar(10))
insert into #T select rtrim('0  '),rtrim('机柜  '),'台',5 ,'000'
insert into #T select rtrim('1  '),rtrim('电脑  '),'台',10,'001'
insert into #T select rtrim('1-1'),rtrim('CPU   '),'个',10,'002'
insert into #T select rtrim('2  '),rtrim('桌子  '),'张',20,'004'
insert into #T select rtrim('3  '),rtrim('凳子  '),'张',20,'005'
insert into #T select rtrim('4  '),rtrim('电脑  '),'台',10,'001'
insert into #T select rtrim('4-1'),rtrim('CPU   '),'个',10,'002'
insert into #T select rtrim('5  '),rtrim('凳子  '),'把',20,'005'
insert into #T select rtrim('6  '),rtrim('参考书'),'本',15,'006'select
    a.*,
    sl2 = (case 
              when not exists(select 1 from #T where bm=a.bm and aID<a.aID) 
                  then (select sum(sl) from #T where bm=a.bm) 
              else 0 
           end)
from
    #T a
order by
    a.aID
/*
aID    mc     dw     sl   bm   sl2
0      机柜   台     5    000  5
1      电脑   台     10   001  20
1-1    CPU    个     10   002  20
2      桌子   张     20   004  20
3      凳子   张     20   004  40
4      电脑   台     10   001  0
4-1    CPU    个     10   002  0
5      凳子   把     20   005  0
6      参考书 本     15   006  15
*/drop table #T

解决方案 »

  1.   

    --生成测试数据
    create table #T(aID varchar(10),mc varchar(10),dw varchar(10),sl int,bm varchar(10))
    insert into #T select rtrim('0  '),rtrim('机柜  '),'台',5 ,'000'
    insert into #T select rtrim('1  '),rtrim('电脑  '),'台',10,'001'
    insert into #T select rtrim('1-1'),rtrim('CPU   '),'个',10,'002'
    insert into #T select rtrim('2  '),rtrim('桌子  '),'张',20,'004'
    insert into #T select rtrim('3  '),rtrim('凳子  '),'张',20,'005'
    insert into #T select rtrim('4  '),rtrim('电脑  '),'台',10,'001'
    insert into #T select rtrim('4-1'),rtrim('CPU   '),'个',10,'002'
    insert into #T select rtrim('5  '),rtrim('凳子  '),'把',20,'005'
    insert into #T select rtrim('6  '),rtrim('参考书'),'本',15,'006'
    --执行查询
    select
        a.aID,
        a.mc,
        a.dw,
        sl = (case 
                  when not exists(select 1 from #T where bm=a.bm and aID<a.aID) 
                      then (select sum(sl) from #T where bm=a.bm) 
                  else 0 
              end),
        a.bm 
    from
        #T a
    order by
        a.aID--输出结果
    /*
    aID    mc     dw     sl   bm
    0      机柜   台     5    000
    1      电脑   台     20   001
    1-1    CPU    个     20   002
    2      桌子   张     20   004
    3      凳子   张     40   004
    4      电脑   台     0    001
    4-1    CPU    个     0    002
    5      凳子   把     0    005
    6      参考书 本     15   006
    */--删除测试数据
    drop table #T
      

  2.   

    select aID,mc,dw,sl,bm,(
       select sum(sl) from table a where a.bm=table.bm group by bm
    )sl2 from table
    group by bm没经过测试~  :)