请帮忙看下这条SQL语句怎么写?

kucao 2012-03-21 11:43:35
具体是通过,充值表和消费表,查询出某个时间段内的一个充值总额,消费总额,余额的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是可以输入的变量。

请高手帮忙,非常感谢!
...全文
148 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2012-03-22
  • 打赏
  • 举报
回复
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)
go

select 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.uid

drop table b , c

/*
uid 充值金额 消费金额 余额
---------- ---------------------------------------- ---------------------------------------- ----------------------------------------
李四 100.00 .00 100.00
张三 300.00 200.00 100.00
赵六 .00 100.00 -100.00

(所影响的行数为 3 行)
*/
kucao 2012-03-22
  • 打赏
  • 举报
回复
非常感谢 dawugui 的回答!结贴!
flyfly2008 2012-03-22
  • 打赏
  • 举报
回复
1楼正解
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]

SQL code
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 v……
[/Quote]+以前有人问过类似问题

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧