(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请问如何用SQL语句实现如下要求?多谢 ( 积分:

  • 主题发起人 主题发起人 jiafei528
  • 开始时间 开始时间
J

jiafei528

Unregistered / Unconfirmed
GUEST, unregistred user!
(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请问如何用SQL语句实现如下要求?多谢 ( 积分: 100 )<br />(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请指点:如
日 期 卡 号 余额(元)
2005-01-10 200 0
2005-01-10 300 0
2005-01-10 100 50
2005-01-11 200 150
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
求2005-01-11到2005-01-12每天所有卡内的余额总和,因相同卡号是以最大日期的余额来计的,这里以2005-01-12来说实际就应是对其中的这几条记录计和:
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
结果为:
2005-01-11 450元
2005-01-12 850元

请问如何用SQL语句实现?
 
(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请指点:如
日 期 卡 号 余额(元)
2005-01-10 200 0
2005-01-10 300 0
2005-01-10 100 50
2005-01-11 200 150
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
求2005-01-11到2005-01-12每天所有卡内的余额总和,因相同卡号是以最大日期的余额来计的,这里以2005-01-12来说实际就应是对其中的这几条记录计和:
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
结果为:
2005-01-11 450元
2005-01-12 850元

请问如何用SQL语句实现?
 
select 日期,(select sum(余额) from table where 日期&amp;lt;='2005-01-12') as 余额 from table where 日期='2005-01-12'
 
Select BB.卡 号 ,Sum(AA.余额) from
(select 卡 号,IsNull(Max(日 期),'2004-12-31') as 最后日期 from table1) AA,
table1 BB WHERE AA.卡 号=BB.卡 号 and AA.日 期=BB.日 期 group by BB.卡 号

 
select sum(余额) from table where 日 期+卡 号 in (select max(日 期)+卡 号 from table where 日期&amp;lt;='2005-01-12' group by 卡 号)
 
这种SQL结果在业务是根本不会出现的,没有一点逻辑可言。
但也可以写出来
select aa.余额 ,bb.日 期 from
(
select sum(a.余额) as 余额 from
(
select 卡号,max(余额) as 余额 from 表 group by 卡号
)a)aa,
(select max(日 期) from 表) bb
 
更正一下:
select max(日期),(select sum(余额) from table where 日期&amp;lt;='2005-01-12') as 余额 from table where 日期='2005-01-12' //加上max
 
多谢楼上的大哥,我已经按阳光大哥的方法得出了某一天的卡内的总余额,再次多谢您!
假如我想得出每天卡内的总余额,不知可否呢?
 
因这语句的难处在如果某卡号在某一天没出现,就要最近日期此卡内余额来作为计算
 
to 柳叶飘飘
有用呀,如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,
我要统计某天时所有卡内的余额总和,
 
按我说的完全能够满足你的要求,你却不相信,真的是失望,解决问题不要只看答案,要看方法呀。

select max(日期),(select sum(余额) from table where 日期&amp;lt;='2005-01-12') as 余额 from table where 日期&amp;lt;='2005-01-12' //加上max,用小于等于该日期
 
to hotboys
因这语句的难处在如果某卡号在某一天没出现,就要最近日期此卡内余额来作为计算

多谢您的参与,您的话也有一定道理!
 
如果你要卡号,那就加入卡号,你贴子的结果没有含卡号,所以我没写卡号
你要的结果到底是什么形式你写一下,我再帮你解决
 
问一下,这种卡能不能充值?如果是不能充值的卡,就很好统计:
select sum(个人余额) from
(select 个人余额=min(余额) from table where 日期&amp;lt;='2005-01-12' group by 卡号)
如果可以充值,则用楼上兄弟们的方法。
 
求2005-01-12时所有卡内的余额总和,因相同卡号是以最大日期的余额来计的,这里实际就应是对其中的这几条记录计和:
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
------------------------------
如果你要上面的结果,可以这样写:
select max(日期),卡号,sum(余额) as 余额 from table where 日期&amp;lt;='2005-01-12' group by 卡号

====================================
2005-01-12 850元
-------------------------------
如果你要上面的结果,那么可以写:
select max(日期),(select sum(余额) from table where 日期&amp;lt;='2005-01-12') as 余额 from table where 日期&amp;lt;='2005-01-12'
 
(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请指点:如
日 期 卡 号 余额(元)
2005-01-10 200 0
2005-01-10 300 0
2005-01-10 100 50
2005-01-11 200 150
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
求2005-01-11到2005-01-12每天所有卡内的余额总和,因相同卡号是以最大日期的余额来计的,这里以2005-01-12来说实际就应是对其中的这几条记录计和:
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
结果为:
2005-01-11 450元
2005-01-12 850元

请问如何用SQL语句实现?
 
to hotboys
可充可消费,你那样SUM(余额)达不到要求,
(如我们上大学时的饭堂系统,其卡是可持续充钱进去嘛,而也在不断的消费,我要统计某天时所有卡内的余额总和, )请指点:如
日 期 卡 号 余额(元)
2005-01-10 200 0
2005-01-10 300 0
2005-01-10 100 50
2005-01-11 200 150
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
求2005-01-11到2005-01-12每天所有卡内的余额总和,因相同卡号是以最大日期的余额来计的,这里以2005-01-12来说实际就应是对其中的这几条记录计和:
2005-01-11 300 250
2005-01-12 100 100
2005-01-12 200 500
结果为:
2005-01-11 450元
2005-01-12 850元

请问如何用SQL语句实现?
 
Select Distinct 日期,(Select sum(余额)
From Table1 BB
Where 日期=(Select Max(日期)
From Table1
Where 日期&amp;lt;=AA.日期 and 卡号=BB.卡号)
) as 总余额
From Table1 AA
Order By 日期

Select Distinct 日期,(Select sum(余额)
From Table1 BB
Where 日期=(Select Max(日期)
From Table1
Where 日期&amp;lt;=AA.日期 and 卡号=BB.卡号)
) as 总余额
From Table1 AA
Where 日期&amp;gt;='2005-01-11' and 日期&amp;lt;='2005-01-12'
Order By 日期
 
楼上的不知验算了没有,最后一条结果好像不对。
=========================================
不得已,我太笨,写了个存储过程,用临时表+游标,我太笨了。

create procedure myproc
as
begin
--drop table #mytemp
declare @date char(23),
@subtotal decimal(11,4),
@subtotal2 decimal(11,4)

select @date='2005-01-12',@subtotal2=0,@subtotal=0

create table #myTemp (
mydate datetime,
subtoal decimal(11,4)
)

declare my_cursor cursor for
select max(日期) as 余额,sum(余额) as 余额 from mytable where 日期&amp;lt;=@date group by 日期

open my_cursor

fetch next from my_cursor
into @date,@subtotal

while @@fetch_status=0
begin
set @subtotal2=@subtotal2+@subtotal
insert into #myTemp (mydate,subtoal) values(@date,@subtotal2)
fetch next from my_cursor
into @date,@subtotal
end

close my_cursor
deallocate my_cursor
select * from #mytemp
end
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
680
import
I
I
回复
0
查看
843
import
I
I
回复
0
查看
978
import
I
后退
顶部