多表统计的SQL语句(InterBase6.01),请高手们高抬贵手.(100分)

L

lop

Unregistered / Unconfirmed
GUEST, unregistred user!
用InterBase6.01做的数据库,三个表分别是:
1、人员资料表:
姓名 姓别 身份证 ......
a 男 111111
b 女 222222
c 男 333333
.
.
.
2、销售收入表:
姓名 销售收入 收入说明 ......
a 500
b 600
c 700
b 230
.
.
.
3、费用支出表:
姓名 费用项目 费用金额
a 1 55
b 2 60
a 2 59
c 3 44
.
.
.

现在想用做一个各人收支统计表,样式如下:
姓名 本月销售收入 本月费用支出 收支净额
a XXXXX XXXXX XXXX
b XXXXX XXXXX XXXX
c XXXXX XXXXX XXXX
.
.
.


在InterBase下这个语句应怎样写,望高手指点。
 
请看:
http://211.101.4.25/delphibbs/dispq.asp?lid=696777

不知道是否对你有帮助!(DELPHI 6.0 + SQL SERVER 2000 + BDE)
 
select a.姓名,a.销售收入,b.费用金额 where 销售收入表 a,费用支出表 b where a.a.姓名=b.姓名 order by a.姓名

不过,收支净额就需要你用程序控制了。
 
select A.姓名,B.sum_销售收入,C.sum_费用支出,(B.sum_销售收入-C.sum_费用支出) as 收入净额
from 人员资料表 A
left outer join
(Select 姓名,sum(销售收入) As sum_销售收入 from 销售收入表 where date between startdate and enddategroup by 姓名) B
on A.姓名 = B.姓名
left outer join
(Select 姓名,sum(费用金额) As sum_费用支出 from 费用支出表 where date between startdate and enddategroup by 姓名) C
on A.姓名 = C.姓名

另:人员资料表和其他表中,应增加一个‘人员ID’作为主键,而不应以‘姓名’作为主键。
 
用视图吧.[:)]
 
agree with GZCYP
 
To sword_liu: 你这样是不行的,因为A表和B表一个人不止一个记录,如果跟你的语句做
A表的一某个人的销售数会视这个人在B表有多少个记录,数字就会增大多少倍,得不
到正确的统计结果,你自己想想是不是。
To GZCYP: 你的语句在其他的商用SQL系统是可行的,可惜InterBase好象不支持这样的语
句。
有熟悉InterBase的朋友给一点意见,有好的解决方法吗?

 
select a.姓名,sum(c.销售收入),sum(b.费用金额) where 人员资料表 a,销售收入表 c,费用支出表 b where a.姓名=b.姓名 and a.姓名=c.姓名
group by a.姓名 order by a.姓名

OK. 经IB6.01 实际测试无错误.

 
这只是SELECT,那UPDATE、DELETE、INSERT能这么操作吗?
 
你做好能建立试图,要不然一条sql语句会很复杂,得有group by ,haveing on否则会有不正确得情况出现!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
912
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部