SQL语句???(50分)

  • 主题发起人 主题发起人 ywy32
  • 开始时间 开始时间
Y

ywy32

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
在编程过程中遇到这样一个问题:
有两个表,表A是存款表
字段1:存款金额;字段2:奖励金额;字段3:存款时间;字段4:操作员编号;……
表b是消费表,
字段1:消费金额;字段2:消费时间;字段3:操作员编号;
要用一条语句查询出在一时间段中,一个操作员的存款、奖励、消费金额各自的和,在一条记录中显示出来
我用了一条SQL语句,
select sum(DepMoney),sum(SaleMoney),a.OperName from tbl_Operator a
left join tbl_Sale b on a.OperNo = b.OperNo and b.DepDate >= '开始时间' and b.DepDate <= '结束时间'
left join tbl_Deposit c on a.OperNo = c.OperNo and b.SaleDate >= '开始时间' and b.SaleDate <= '结束时间'
where a.OperNo = '001'
Group by a.OperName
结果查出来不对,如果存款了2次,消费了5次,那么存款总额就是正确的5倍,消费总额就是正确的2倍。
请问,这样的语句,如何写SQL语句?谢谢
 
做一个这样的视图,然后对这个视图进行针对MyDate的限制、对DepMoney,SaleMoney的
Sum以及对tbl_Operator进行join操作即可:

select 0 as DepMoney,SaleMoney,OperNo,DepDate as MyDate from tbl_Sale
Union
select DepMoney,0 as SaleMoney,OperNo,SaleDate as MyDate from tbl_Deposit

要用Union,而不能用Join,因为存款和消费之间不存在笛卡尔积运算的关系。
 
那得到的不是一条记录哦!
 
select sum_DepMoney, sum_SaleMoney,e.OperName from

(select sum(DepMoney) as sum_DepMoney ,a.OperName from tbl_Operator a
left join tbl_Sale b on a.OperNo = b.OperNo and b.DepDate >= '开始时间' and b.DepDate <= '结束时间' where a.OperNo = '001' Group by a.OperName ) e,
(select sum(SaleMoney) as sum_SaleMoney,d.OperName from tbl_Operator d left join tbl_Deposit c on d.OperNo = c.OperNo and c.SaleDate >= '开始时间' and c.SaleDate <= '结束时间' where a.OperNo = '001' Group by a.OperName ) f
 
和楼上的相似:
select sum_DepMoney, sum_SaleMoney,e.OperName from
(select sum(DepMoney) as sum_DepMoney ,a.operno,a.OperName from tbl_Operator a
left join tbl_Sale b on a.OperNo = b.OperNo where b.DepDate >= '开始时间' and b.DepDate <= '结束时间' Group by a.OperNo,a.OperName ) e,
(select sum(SaleMoney) as sum_SaleMoney,d.operno,d.OperName from tbl_Operator d left join tbl_Deposit c on d.OperNo = c.OperNo where c.SaleDate >= '开始时间' and c.SaleDate <= '结束时间' Group by a.OperNo ,a.OperName ) f where e.OperNo=f.OperNo and e.OperName=f.OperName
 
在补加一个问题!
在使用TQRExpr控件时,计算不同字段的和时,总是有的可以计算出来,有的计算不出来,不知怎么回事?
哪位大虾知道为什么!谢谢
 
多人接受答案了。
 
后退
顶部