具体是通过,充值表和消费表,查询出某个时间段内的一个充值总额,消费总额,余额的sql,具体如下:[B] 会员充值表: sj:充值时间 je:充值金额  
B.id, B.uid, B.sj,    B.je
1     张三 2012-02-01 200.00  
2     李四 2012-02-01 100.00
4     张三 2012-02-15 100.00[C] 会员消费表: sj:消费时间 je:消费金额  
C.id, C.uid, C.sj,      C.je
1     张三   2012-02-02 200.00  
2     赵六   2012-02-05 100.00
3     陈七   2012-02-17 50.00
想统计某个时间段内,比如:2012-2-1 至 2012-2-15 的 会员充值,消费,及余额表,统计结果如下uid,  充值金额,   消费金额,  余额
张三  300         200        100
李四  100         0          100
赵六  0           100        -100我知道正规的应该有个[A]会员表,如果有个[A]会员表这个就好办了 就可以 left join group by 来做。
但是现在这个[A]会员表,有些会员被删除了,就是说会员表里可能没有这个会员,但是却在充值和消费表里有这个记录,
所以现在就不能考虑[A]表了,只通过[B],[C]表来查询结果,要求起止时间和uid是可以输入的变量。请高手帮忙,非常感谢!

解决方案 »

  1.   

    create table B(id int, uid varchar(10), sj datetime,je decimal(18,2))
    insert into b values(1 ,'张三', '2012-02-01', 200.00)
    insert into b values(2 ,'李四', '2012-02-01', 100.00)
    insert into b values(4 ,'张三', '2012-02-15', 100.00)
    create table C(id int, uid varchar(10), sj datetime,je decimal(18,2))
    insert into c values(1 ,'张三', '2012-02-02', 200.00)
    insert into c values(2 ,'赵六', '2012-02-05', 100.00)
    insert into c values(3 ,'陈七', '2012-02-17', 50.00)
    goselect isnull(m.uid,n.uid) uid ,
           isnull(m.je , 0) 充值金额,
           isnull(n.je , 0) 消费金额,
           isnull(m.je , 0) - isnull(n.je , 0) 余额
    from
    (select uid , sum(je) je from b where convert(varchar(10),sj,120) between '2012-02-01' and '2012-02-15' group by uid) m
    full join
    (select uid , sum(je) je from c where convert(varchar(10),sj,120) between '2012-02-01' and '2012-02-15' group by uid) n
    on m.uid = n.uiddrop table b , c/*
    uid        充值金额                                     消费金额                                     余额                                       
    ---------- ---------------------------------------- ---------------------------------------- ---------------------------------------- 
    李四         100.00                                   .00                                      100.00
    张三         300.00                                   200.00                                   100.00
    赵六         .00                                      100.00                                   -100.00(所影响的行数为 3 行)
    */
      

  2.   

    非常感谢 dawugui 的回答!结贴!