表account  //用来记录用户开户的信息
accountID  name  money  date
001        张三  2000   2007-07-08
002        李四  30000  2006-01-09表accoutInfo //用来记录用户存取款信息
id   accountID   date          money
1     001        2007-09-01    -500
2     001        2008-01-01    -100
3     002        2008-05-05    -30000
如何用oracle的sql语句得出如下信息
accountID    开户金额   剩余金额   交易金额  交易日期
001           2000       1500        -500      2007-09-01
001           2000       1400        -100      2008-01-01
002           30000      0           -30000    2006-01-09

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【binxigogo】截止到2008-07-08 14:57:45的历史汇总数据(不包括此帖):
    发帖的总数量:11                       发帖的总分数:370                      每贴平均分数:33                       
    回帖的总数量:39                       得分贴总数量:14                       回帖的得分率:35%                      
    结贴的总数量:6                        结贴的总分数:220                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:5                        未结的总分数:150                      
    结贴的百分比:54.55 %               结分的百分比:59.46 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主加油
      

  2.   

    select acc.accountID,acc.money as 开户金额,(acc.money+accinfo.money) as 剩余金额,accinfo.money as
     交易金额  accinfo.date from account as acc,accountInfo as accinfo where acc.accountID=accinfo.accountID;
    还可以用natural join 或者join on
      

  3.   

    zidasine的肯定是不对的了
    要测试了再给答案啊,写对者马上给分
      

  4.   

    select a.accountID ,a.money 开户金额,(a.money-b.money) 剩余金额,b.money 交易金额,b.date  交易日期 
     from account a,accoutInfo b where a.accountID  =b.accountID  
      

  5.   

    select acc.accountID,acc.money as 开户金额,(acc.money+accinfo.money) as 剩余金额,accinfo.money as
    交易金额  accinfo.date from account as acc,accountInfo as accinfo where acc.accountID=accinfo.accountID group by acc.accountID
    可以参考一下FaceYe开源portal里面关于这一点的实现http://ecsun.javaeye.com
      

  6.   

    差不多这样了,自己改下了.
    SELECT         a.accountId, 
                   a.money,
                   a.money+(select  sum(money)  
                            from    accountinfo             
                            where   accountinfo.date>=b.date     
                            and   accountinfo.accountid=a.accountId),
                   b.money,
                   b.[date] FROM           account a INNER JOIN
                   accountInfo b ON a.accountId = b.accountIdorder by  a.accountId, a.[date] 
      

  7.   

    如果是oracle的话,用一个分析函数里的累加就可以搞定了
      

  8.   

    看来写3条结果容易产生误会
    输出这样的结果
    accountID    开户金额  剩余金额  交易金额  交易日期
    001          2000      1500        -500      2007-09-01
    001          2000      1400        -100      2008-01-01
    001          2000      1000        -400      2008-01-03
    001          2000      800        -200      2008-01-07
    002          30000     20000      -10000    2006-01-09 
    002          30000     10000      -10000    2006-01-23
      

  9.   

    你把date 排序,改下不就好了
    总的来说,就是看日期累加
      

  10.   

    6L直接copy别人的错误答案就算了,还给自己打广告,太无耻了
    建议斑竹封掉他LZ问sql的帖发到数据库版会好点。
      

  11.   

    在数据库的accoutInfo表里在加一个字段为当前的钱,这样不就方便了,不用想那么多了
    accout的表
    1 张三 2000.0 2007-07-08 00:00:00.000
    2 李四 30000.0 2006-01-09 00:00:00.000
    accoutInfo的表
    1 1 2007-09-01 00:00:00.000 1500.0 -500.0
    2 1 2008-01-01 00:00:00.000 1400.0 -100.0
    3 2 2008-05-05 00:00:00.000 0.0 -30000.0select a.accout_id, a.accout_money as 开户金额,b.accoutInfo_trueMoney as 剩余金额,
    b.accoutInfo_money as 交易金额,b.accoutInfo_date as   交易日期
     from accout as a,accoutInfo as b where a.accout_id=b.accout_id 
    结果为
    1 2000.0 1500.0 -500.0 2007-09-01 00:00:00.000
    1 2000.0 1400.0 -100.0 2008-01-01 00:00:00.000
    2 30000.0 0.0 -30000.0 2008-05-05 00:00:00.000