高分求SQL语句!!!(100分)

  • 主题发起人 主题发起人 lzliang
  • 开始时间 开始时间
L

lzliang

Unregistered / Unconfirmed
GUEST, unregistred user!
现有表A结构如下:
字段1 ID
字段2 日期
字段3 标志 0 :收入 1:支出
字段4 金额

内容如下:
ID 日期 标志 金额
1 1999-10-1 0 1000.00
6 1999-10-25 1 500.00
4 1999-10-15 1 200.00
5 1999-10-15 0 100.00
希望用SQL语句实现如下查询结果:

序号 日期 类型 收入金额 支出金额 余额
1 1999-10-1 收入 1000.00 1000.00
2 1999-10-15 支出 200.00 800.00
3 1999-10-15 收入 100.00 900.00
4 1999-10-25 支出 500.00 500.00
不知SQL能否实现?
 
对不起,上面写错了。希望用SQL语句实现查询结果应该是:
序号 日期 类型 收入金额 支出金额 余额
1 1999-10-1 收入 1000.00 1000.00
2 1999-10-15 支出 200.00 800.00
3 1999-10-15 收入 100.00 900.00
4 1999-10-25 支出 500.00 400.00
请各位大侠赐教!
 
要通用型的语句的确有一定的难度
要是知识实现上面的内容,那只要把查询条件设置的复杂一些就可以了
 
试试吧,我在网吧里,没法试,不过,应该可以的。
select 日期, 类型名 (1 - 类型) * 金额 收入, 类型 * 金额 支出,
金额*2*类型 - 金额 余额
from 帐本, types
where types.类型 = 帐本.类型
 
麻烦在于日期有重复,标志顺序与日期不一致,又必须按照日期排序。
还没办法解决。
如果按照id排序,则
select id,日期,(1-标志)*金额 as 收入,标志*金额 as 支出,
(select sum((1-2*x.标志)*x.金额) from a x where x.id <= y.id) as 余额
from a y
order by id
 
to温柔一刀:
还不出刀?
 
to 老dai:

你写的和我想的一样啊,只是那个标志谁是1,谁是0,实在懒得想,
因此就先关注一下,如果没有人答出来,再来回答也不迟。
--现在我已经不太想回答没有挑战性的问题了(谁扔砖头??...)。

至于日期和序号(ID),我看顺序是一致的呀,因此你的语句应该正确,
如果序号一定要显示成1,2,3,4...,可以参考这个贴子:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=277950

ps:您老真是活学活用的典范呀!(对不起,开个玩笑 *_^)

您的观察力也太强,竟然从e-mail通知中发现我关注此题?
建议斑竹取消这一显示功能 :-)
 
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=277950

上面的例子我看啦,真的不错,大师就是大师啊。谢谢一刀大师。
 
各位大侠,可能是我的问题讲得不够清楚。
我的意思:
1.数据库的ID并非查询结果的序号,我希望用SQL语句直接得出新的查询序号,
而不是用程序处理(以前的答案我试过不成功)。
2.我希望直接根据标志及金额,用SQL语句得出余额。

我还没有得到我想得到的答案。
 
>>1.数据库的ID并非查询结果的序号,我希望用SQL语句直接得出新的查询序号

我的方法是当今世界上唯一已知的可以在任何情况下显示序号的方式,除此无他,
但是你的查询需求确实有特殊之处,经过考虑,可以用SQL语句完成ID的产生。

>>2.我希望直接根据标志及金额,用SQL语句得出余额。

daiqingbo的语句你试验了吗?难道有问题?至少我看不出来。

因此,我的答案如下:(数据计算部分取自上面daiqingbo语句,未作改动)

select (select count(ID) from a z where z.ID<=y.ID) as NewID,
日期,(1-标志)*金额 as 收入,标志*金额 as 支出,
(select sum((1-2*x.标志)*x.金额) from a x where x.id <= y.id) as 余额
from a y order by id
 
同意温柔一刀的写法
 
to daiqingbo
温柔一刀:
你们的答案已经相当接近正确了,序号已经解决。
但余额还是有一点问题,可能我的例子太简单了,运行两位的
语句当然正确。但是当例子的内容再丰富一些,例如当天有超
过一笔以上的发生额而且ID与日期倒挂(必须Order by 日期,ID)时,
余额的显示就有问题了!请继续努力,我就快给分了!

 
to daiqingbo
温柔一刀:
你们的答案已经相当接近正确了,序号已经解决。
但余额还是有一点问题,可能我的例子太简单了,运行两位的
语句当然正确。但是当例子的内容再丰富一些,例如当天有超
过一笔以上的发生额而且ID与日期倒挂(必须Order by 日期,ID)时,
余额的显示就有问题了!请继续努力,我就快给分了!

 
接受答案了.
 
后退
顶部