有如下表
存入日期 取款日期 取款金额 存钱银行卡号      存入金额    取款银行卡号
null 2006-6-2 2 null       null        4367111111111111111
null 2006-6-3 3 null       null        4367111111111111111
null 2006-6-4 4 null       null        4367111111111111111
2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111
2006-6-2 null null 4367111111111111111 200 null
2006-6-3 null null 4392222222222222           56 null
2006-6-4 null null 4392222222222222           67 null
2006-6-5 null null 4392222222222222            5 null
如何得到视图
存入日期 取款日期 取款金额 存钱银行卡号   存入金额    取款银行卡号    剩余金额
null 2006-6-2 2 null    null    4367111111111111111  397
null 2006-6-3 3 null    null    4367111111111111111  394
null 2006-6-4 4 null    null    4367111111111111111  390
2006-4-1 2006-6-1 1 4367111111111111111   400   4367111111111111111  399
2006-6-2 null null 4367111111111111111   200     null               590
2006-6-3 null null 4392222222222222     56     null               56
2006-6-4 null null 4392222222222222     67     null               123
2006-6-5 null null 4392222222222222     5     null               128

解决方案 »

  1.   

    trySelect 
    *,
    (Select SUM(IsNull(存入金额,0)-IsNull(取款金额,0)) From TableName A Where IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)) As 剩余金额
    From TableName A
      

  2.   

    null 2006-6-2 2 null    null    4367111111111111111  397
    null 2006-6-3 3 null    null    4367111111111111111  394
    null 2006-6-4 4 null    null    4367111111111111111  390
    2006-4-1 2006-6-1 1 4367111111111111111   400   4367111111111111111  399
    2006-6-2 null null 4367111111111111111   200     null               590这个我怎么觉得不对啊
    4367111111111111111卡在6月2日帐户余额到底还有多少?
      

  3.   


    create table cash
    (
    存入日期 varchar(10),
    取款日期 varchar(10),
    取款金额 money,
    存钱银行卡号 varchar(19),
    存入金额 money,
    取款银行卡号 varchar(19)
    )insert into cash
    select null,'2006-6-2',2,null,null,'4367111111111111111'
    union
    select null,'2006-6-3',3,null,null,'4367111111111111111'
    union
    select null,'2006-6-4',4,null,null,'4367111111111111111'
    union
    select '2006-4-1','2006-6-1',1,'4367111111111111111',400,'4367111111111111111'
    union
    select '2006-6-2',null,null,'4367111111111111111',200,'4367111111111111111'
    union
    select '2006-6-3',null,null,'4392222222222222',56,null
    union
    select '2006-6-4',null,null,'4392222222222222',57,null
    union
    select '2006-6-5',null,null,'4392222222222222',5,nullSelect 
    *,
    (Select SUM(IsNull(存入金额,0)-IsNull(取款金额,0)) 
    From cash
    Where IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)
    and isnull(存钱银行卡号,取款银行卡号)=isnull(A.存钱银行卡号,A.取款银行卡号)
    group by Isnull(存钱银行卡号,取款银行卡号)) As 剩余金额
    From cash a存入日期       取款日期       取款金额                  存钱银行卡号              存入金额                  取款银行卡号              剩余金额                  
    ---------- ---------- --------------------- ------------------- --------------------- ------------------- --------------------- 
    NULL       2006-6-2   2.0000                NULL                NULL                  4367111111111111111 597.0000
    NULL       2006-6-3   3.0000                NULL                NULL                  4367111111111111111 594.0000
    NULL       2006-6-4   4.0000                NULL                NULL                  4367111111111111111 590.0000
    2006-4-1   2006-6-1   1.0000                4367111111111111111 400.0000              4367111111111111111 399.0000
    2006-6-2   NULL       NULL                  4367111111111111111 200.0000              4367111111111111111 597.0000
    2006-6-3   NULL       NULL                  4392222222222222    56.0000               NULL                56.0000
    2006-6-4   NULL       NULL                  4392222222222222    57.0000               NULL                113.0000
    2006-6-5   NULL       NULL                  4392222222222222    5.0000                NULL                118.0000
      

  4.   

    oyzm(欧阳) ( ) 信誉:100  2006-06-06 14:53:00  得分: 0  
     
     
       6-1号存了400,取了1,是399
    6-2号只取了2就是399-2=397----------------------------------  
     
    二号又存了200进去,余额应该是5百多才对0_0
      

  5.   

    --建立測試環境
    Create Table TEST
    (存入日期 Varchar(10),
     取款日期 Varchar(10),
     取款金额 Int,
     存钱银行卡号 Char(19),
     存入金额 Int,
     取款银行卡号 Char(19))
    --插入數據
    Insert TEST Select null, '2006-6-2', 2, null,        null, '4367111111111111111'
    Union All Select null, '2006-6-3', 3, null,       null, '4367111111111111111'
    Union All Select null, '2006-6-4', 4, null,        null, '4367111111111111111'
    Union All Select '2006-4-1', '2006-6-1', 1, '4367111111111111111',400, '4367111111111111111'
    Union All Select '2006-6-2', null, null, '4367111111111111111',200, null
    Union All Select '2006-6-3', null, null, '4392222222222222', 56, null
    Union All Select '2006-6-4', null, null, '4392222222222222', 67, null
    Union All Select '2006-6-5', null, null, '4392222222222222', 5, null
    GO
    --測試
    Select 
    *,
    (Select SUM(IsNull(存入金额,0))-SUM(IsNull(取款金额,0)) From TEST Where IsNull(存钱银行卡号,取款银行卡号)=IsNull(A.存钱银行卡号,A.取款银行卡号) And IsNull(存入日期,取款日期)<= IsNull(A.存入日期,A.取款日期)) As 剩余金额
    From TEST A
    GO
    --刪除測試環境
    Drop Table TEST
    GO
    --結果
    /*
    存入金额 取款日期 取款金额 存钱银行卡号 存入金额 取款银行卡号 剩余金额
    NULL 2006-6-2 2 NULL NULL 4367111111111111111 597
    NULL 2006-6-3 3 NULL NULL 4367111111111111111 594
    NULL 2006-6-4 4 NULL NULL 4367111111111111111 590
    2006-4-1 2006-6-1 1 4367111111111111111 400 4367111111111111111 399
    2006-6-2 NULL NULL 4367111111111111111 200 NULL 597
    2006-6-3 NULL NULL 4392222222222222    56 NULL 56
    2006-6-4 NULL NULL 4392222222222222    67 NULL 123
    2006-6-5 NULL NULL 4392222222222222    5 NULL 128
    */
      

  6.   

    oyzm(欧阳) ( ) 信誉:100  2006-06-06 14:53:00  得分: 0  
     
     
       6-1号存了400,取了1,是399
    6-2号只取了2就是399-2=397----------------------------------  
     
    二号又存了200进去,余额应该是5百多才对0_0
      

  7.   

    oyzm(欧阳) ( ) 信誉:100  2006-06-06 14:53:00  得分: 0  
     
     
       6-1号存了400,取了1,是399
    6-2号只取了2就是399-2=397----------------------------------  
     
    二号又存了200进去,余额应该是5百多才对0_0
    你对了,应该是5百多