declare   @a   table(序号 int,日期  datetime,金额  money)   
    
 
insert   @a   values(4,'2009-9-30',5000)   
insert   @a   values(5,'2009-9-30',5000)   
insert   @a   values(6,'2009-9-30',5000)   
  insert   @a   values(1,'2009-10-30',2000)   
  insert   @a  values(2,'2009-10-30',1000)   
  insert   @a   values(3,'2009-10-30',5000)  
select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<=b.日期 and a.序号<=b.序号) from @a b order by 日期,序号--我想第一个主要按日期排序如日期相同再按序号排序,但为什么不对呢!有高手帮我解决下吗! 能说下为什么并帮我改改!谢谢了!

解决方案 »

  1.   

    declare   @a   table(序号 int,日期  datetime,金额  money)   
        
     
    insert   @a   values(4,'2009-9-30',5000)   
    insert   @a   values(5,'2009-9-30',5000)   
    insert   @a   values(6,'2009-9-30',5000)   
      insert   @a   values(1,'2009-10-30',2000)   
      insert   @a  values(2,'2009-10-30',1000)   
      insert   @a   values(3,'2009-10-30',5000)  
    select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<=b.日期 and a.序号<=b.序号) from @a b order by 日期,序号--我想第一个主要按日期排序如日期相同再按序号排序,但为什么不对呢!有高手帮我解决下吗! 能说下为什么并帮我改改!谢谢了!
    我想要的结果如下:
    4  2009-9-30    5000   5000
    5  2009-9-30    5000   10000
    6  2009-9-30    5000   15000
    1  2009-10-30   2000   17000
    2  2009-10-30   1000   18000
    3  2009-10-30   2000   20000     
      

  2.   

    你这个是正确的啊
    declare  @a  table(序号 int,日期  datetime,金额  money)  
        insert  @a  values(4,'2009-9-30',5000)  
    insert  @a  values(5,'2009-9-30',5000)  
    insert  @a  values(6,'2009-9-30',5000)  
      insert  @a  values(1,'2009-10-30',2000)  
      insert  @a  values(2,'2009-10-30',1000)  
      insert  @a  values(3,'2009-10-30',5000)  
    select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期 <=b.日期 and a.序号 <=b.序号) from @a b order by 日期,序号 
    /*
    (1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)
    序号          日期                      金额                    累计
    ----------- ----------------------- --------------------- ---------------------
    4           2009-09-30 00:00:00.000 5000.00               5000.00
    5           2009-09-30 00:00:00.000 5000.00               10000.00
    6           2009-09-30 00:00:00.000 5000.00               15000.00
    1           2009-10-30 00:00:00.000 2000.00               2000.00
    2           2009-10-30 00:00:00.000 1000.00               3000.00
    3           2009-10-30 00:00:00.000 5000.00               8000.00(6 行受影响)*/
      

  3.   

    select 
      序号,日期,金额,
      累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号) 
    from 
      @a b 
    order by 
      日期,序号 
      

  4.   


    declare  @a  table(序号 int,日期  datetime,金额  money)  insert  @a  values(4,'2009-9-30',5000)  
    insert  @a  values(5,'2009-9-30',5000)  
    insert  @a  values(6,'2009-9-30',5000)  
    insert  @a  values(1,'2009-10-30',2000)  
    insert  @a  values(2,'2009-10-30',1000)  
    insert  @a  values(3,'2009-10-30',5000)  select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期 <=b.日期 and a.序号 <=b.序号) from @a b order by 日期,序号 
    序号          日期                      金额                    累计
    ----------- ----------------------- --------------------- ---------------------
    4           2009-09-30 00:00:00.000 5000.00               5000.00
    5           2009-09-30 00:00:00.000 5000.00               10000.00
    6           2009-09-30 00:00:00.000 5000.00               15000.00
    1           2009-10-30 00:00:00.000 2000.00               2000.00
    2           2009-10-30 00:00:00.000 1000.00               3000.00
    3           2009-10-30 00:00:00.000 5000.00               8000.00(6 行受影响)哪里不对
      

  5.   

    declare  @a  table(序号 int,日期  datetime,金额  money)  
        insert  @a  values(4,'2009-9-30',5000)  
    insert  @a  values(5,'2009-9-30',5000)  
    insert  @a  values(6,'2009-9-30',5000)  
      insert  @a  values(1,'2009-10-30',2000)  
      insert  @a  values(2,'2009-10-30',1000)  
      insert  @a  values(3,'2009-10-30',5000)  select 
      序号,日期,金额,
      累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号) 
    from 
      @a b 
    order by 
      日期,序号 
    /*
    (序号          日期                      金额                    累计
    ----------- ----------------------- --------------------- ---------------------
    4           2009-09-30 00:00:00.000 5000.00               5000.00
    5           2009-09-30 00:00:00.000 5000.00               10000.00
    6           2009-09-30 00:00:00.000 5000.00               15000.00
    1           2009-10-30 00:00:00.000 2000.00               17000.00
    2           2009-10-30 00:00:00.000 1000.00               18000.00
    3           2009-10-30 00:00:00.000 5000.00               23000.00(6 行受影响)*/
      

  6.   

    这样?declare  @a  table(序号 int,日期  datetime,金额  money)  
        insert  @a  values(4,'2009-9-30',5000)  
    insert  @a  values(5,'2009-9-30',5000)  
    insert  @a  values(6,'2009-9-30',5000)  
      insert  @a  values(1,'2009-10-30',2000)  
      insert  @a  values(2,'2009-10-30',1000)  
      insert  @a  values(3,'2009-10-30',5000)  
    select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<b.日期 or (a.日期=b.日期 and a.序号 <=b.序号)) from @a b order by 日期,序号 /*
    序号          日期                                                     金额                    累计                    
    ----------- ------------------------------------------------------ --------------------- --------------------- 
    4           2009-09-30 00:00:00.000                                5000.0000             5000.0000
    5           2009-09-30 00:00:00.000                                5000.0000             10000.0000
    6           2009-09-30 00:00:00.000                                5000.0000             15000.0000
    1           2009-10-30 00:00:00.000                                2000.0000             17000.0000
    2           2009-10-30 00:00:00.000                                1000.0000             18000.0000
    3           2009-10-30 00:00:00.000                                5000.0000             23000.0000(所影响的行数为 6 行)*/
      

  7.   

    你最后一条数据是:
    insert  @a  values(3,'2009-10-30',5000)  所以结果是:
    3           2009-10-30 00:00:00.000  5000.0000             23000.0000不是你说的:
    3           2009-10-30 00:00:00.000  5000.0000             20000.0000
      

  8.   

    谢谢fredrickhu      太感谢了!!真的解决了!能解释下吗?
      

  9.   

    先比较日期 a.日期<b.日期
    如果日期相同,再比较序号:(a.日期=b.日期 and a.序号 <=b.序号)
      

  10.   


    declare  @a  table(序号 int,日期  datetime,金额  money)  insert  @a  values(4,'2009-9-30',5000)  
    insert  @a  values(5,'2009-9-30',5000)  
    insert  @a  values(6,'2009-9-30',5000)  
    insert  @a  values(1,'2009-10-30',2000)  
    insert  @a  values(2,'2009-10-30',1000)  
    insert  @a  values(3,'2009-10-30',5000)  select 序号,日期,金额,
    累计=(select sum(金额) from @a a where (a.日期 <b.日期) or ( a.日期 =b.日期 and a.序号 <=b.序号)) 
    from @a b order by 日期,序号 序号          日期                      金额                    累计
    ----------- ----------------------- --------------------- ---------------------
    4           2009-09-30 00:00:00.000 5000.00               5000.00
    5           2009-09-30 00:00:00.000 5000.00               10000.00
    6           2009-09-30 00:00:00.000 5000.00               15000.00
    1           2009-10-30 00:00:00.000 2000.00               17000.00
    2           2009-10-30 00:00:00.000 1000.00               18000.00
    3           2009-10-30 00:00:00.000 5000.00               23000.00(6 行受影响)
      

  11.   

    select 
      序号,日期,金额,
      累计=(select sum(金额) from @a a where a.日期 <b.日期 or a.日期=b.日期 and a.序号 <=b.序号) 
    from 
      @a b 
    order by 
      日期,序号 select 序号,日期,金额,累计=(select sum(金额) from @a a where a.日期<b.日期 or (a.日期=b.日期 and a.序号 <=b.序号)) from @a b order by 日期,序号 
    这两种写法那种效率高一些呢?还是一样的?
      

  12.   

    第一种是错的.
    第二种最好写成:
    (a.日期 <b.日期) or (a.日期=b.日期 and a.序号 <=b.序号)
      

  13.   

    不就多个括号吗,先and后or,不知道何错之有?