请帮忙看下这条SQL语句怎么写?
具体是通过,充值表和消费表,查询出某个时间段内的一个充值总额,消费总额,余额的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是可以输入的变量。
请高手帮忙,非常感谢!
[解决办法]
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) mfull 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) non 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 行)*/