探索SQL问题,高手请进!(50分)

  • 主题发起人 主题发起人 qdgm988
  • 开始时间 开始时间
Q

qdgm988

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样一个问题希望于大家共同探讨一下,请各位不吝指教!
TABLE如下
日期 收入 支出
2000/3/1 50 30
2000/3/2 45 60
2000/3/5 60 10

能否用SELECT語句得出以下結果(MS SQL)
1.
日期 收入 支出 余額
2000/3/1 50 30 20
2000/3/2 45 60 5
2000/3/5 60 10 55
2.
TABLE加入一行
2000/3/5 60 10
結果
日期 收入 支出 余額
2000/3/1 50 30 20
2000/3/2 45 60 5
2000/3/5 120 20 105
 
select 日期,sum(收入) as 收入,sum(支出) as 支出,sum(收入)-sum(支出) as 余额
from 表名
group by 日期
 
让楼上的先说了
双手同意!
 
同意QuickSilver, 主要使用group by 子句
select 日期,收入=sum(收入) ,支出=sum(支出) ,余额=sum(收入)-sum(支出)
from TABLE
group by 日期

 
楼上几位的意思都是正确的,但是还需要避免一个问题。
如果你在写入数据库时,无支出时字段值不是用0,而是保持的null,
则在上面的语句中还要进行转换,遇到null时,将其转为0。
 
select 日期,sum(iff(isnull(收入),0,收入)) as 收入,sum(iff(isnull(支出),0,支出)) as 支出.
sum(iff(isnull(收入),0,收入)-iff(isnull(支出),0,支出)) as 余额 from TABLE
group by 日期 order by 日期
这在access里绝对可以!!!!
 
我觉得上面的都有一个问题--余额不准确,必须用一个游标才行的,逐行来计算,然后
列出来
 
不知各位是否看明白我的问题,余额的计算并不是单纯的(收入-支出),
日期 收入 支出
2000/3/1 50 30
2000/3/2 45 60
2000/3/5 60 10
能否用SELECT語句得出以下結果(MS SQL)
1.
日期 收入 支出 余額
2000/3/1 50 30 20 =50-30
2000/3/2 45 60 5 =20+45-60
2000/3/5 60 10 55 =5+60-10


 
單純用SQL_SELECT語句幾乎不可能,既然用MSSQL,為何不用存儲過程+臨時表變量的方式?
 
我在oracle8i中用select实现,但要求在MS-SQL中实现,请各位指教!
 
crazypc,写错了吧,ACCESS中是IIF 不是iff 吧!
 
如果是这样的需求的话,修改SQL语句中的余额为嵌套查询就可以了。
还有,你说用oracle的语句实现了,可以将语句贴出来,看哪位热心的DFW直接将语句改写
一下好了。
我用的也是oracle。
 
按道理来说,要实现这样的功能单纯用SQL语句的话,恐怕不可能!

所以我个人认为要用到CURSON。这样才能实现这样的功能
 
select CONVERT(varchar(10),日期,20) as 日期,
收入,
支出,
(select sum(收入-支出) from table1 where 日期<=AAA.日期) as 余额
FROM (select 日期,sum(收入) as 收入,sum(支出) as 支出
from table1 group by 日期) AAA

在MSSQL下通过
 
建议在表中增加一列余额,然后就可根据上一列的余额来计算下一列
选择时也很简单
 
非常非常感谢QuickSilver,请问还有无其他的方法和思路?

pcspace,表中增加一列余额,如何快速根据上一列的余额来计算下一列
 
因为数据量很大,所以判断日期计算余额时耗费大量时间,不知有无高效的解决办法!
 
select identity(int,1,1) as id,
convert(varchar(10),日期,20) as 日期,
sum(收入) as 收入,
sum(支出) as 支出,
sum(收入-支出) as 余额
into #temp
from table1
group by convert(varchar(10),日期,20)
go
select 日期,收入,支出,
(select sum(余额) from #temp where id<=AAA.id) as 余额
from #temp AAA
go

分成两部份来做看看吧,不过我想速度也提高不了多少的
判断数字应该比判断日期要快吧?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部