不用游标,累加
已知表:  
Name            Qty  
A                100  
B                200  
C                300  
B                400  
A                500  
C                600  
A                700  
 
要求逐行从前向后累加,想得到:  
Name              Qty                        TTL  
   A                100                        100  
   B                200                        200  
   C                300                        300  
   B                400                        600  
   A                500                        600  
   C                600                        900  
   A                700                      1300    
 
有无好的方法?谢了.  
 
---------------------------------------------------------------  
 
如果没有其他字段:  
 
select  Name,Qty,IDENTITY  (  int)  AS  Id  into  #Temp  from  tablename  
 
select  Name,Qty,(select  sum(Qty)  from  #Temp  where  name=a.name  and  Id<=a.Id)  as  TTL  
from  #Temp  a  
 
---------------------------------------------------------------  
 
典型的数据累加问题。  
如果有一个PID(IDENTITY  int)字段,就只要一句够了:  
 
 
select  Name,Qty,(select  sum(Qty)  from  TableName  where  name=a.name  and  PId<=a.PId)  as  TTL  
from  TableName  a  
 
---------------------------------------------------------------  
 
select  b.name,b.qty,(select  sum(a.qty)  
                                 from  (select  name,qty,identity(int)  as  id  into  temp  
                                             from  已知表)  a  
                                 where  a.name=b.name  and  a.id<=b.id)  
from  (select  name,qty,identity(int)  as  id  into  temp  
           from  已知表)  b  
---------------------------------------------------------------  
 
should  be  this  result  sum  row  by  row  
Name                                                      Qty                  TTL                    
------------------------------  -----------  -----------    
A                                                            100                  100  
B                                                            200                  300  
C                                                            300                  600  
D                                                            400                  1000  
E                                                            500                  1500  
F                                                            600                  2100  
F                                                            700                  2800  
 
(7  row(s)  affected)  
 
select  Name,Qty,(select  sum(Qty)  from  Table1  where  PId<=a.PId)  as  TTL  
from  Table1  a  --仅供参考

解决方案 »

  1.   

    可我只要得出在一条语句以换行方式显示出以上格式:
    A                                                            100                  100  
    B                                                            200                  300  
    C                                                            300                  600  
    D                                                            400                  1000  
    E                                                            500                  1500  
    F                                                            600                  2100  
    F                                                            700                  2800  
    不知有没有办法,谢谢
      

  2.   

    这个结果:
    Name              Qty                        TTL  
       A                100                        100  
       B                200                        200  
       C                300                        300  
       B                400                        600  
       A                500                        600  
       C                600                        900  
       A                700                      1300    
    和这个结果:
    Name                                                      Qty                  TTL                    
    ------------------------------  -----------  -----------    
    A                                                            100                  100  
    B                                                            200                  300  
    C                                                            300                  600  
    D                                                            400                  1000  
    E                                                            500                  1500  
    F                                                            600                  2100  
    F                                                            700                  2800  
    语句写法有什么不同?