怎么用sql实现两个表相关字段的运算(50分)

C

cosmile

Unregistered / Unconfirmed
GUEST, unregistred user!
table1为上年统计,字段:code,name,money
table2为今年统计,字段同上
现在想计算money的同比增长 :(今年money-去年money)/去年money;
该怎么在Delphi6里写sql
请大家帮忙想想
不尽感激

 
select 去年code,去年name,(今年money-去年money)/去年money
from table1,table2
where :(今年code=去年code
 
select (table2.money-table1.money)/table1.money
from table1,table2
where table1.code=table2.code
不行吗?
 
谢谢两位的答复
现在我遇到的问题是Table1和Table2中有相同code和name的不同money
比如table1中记录为
code name money
01 corp1 100
01 corp1 150
02 corp2 200
table2中记录为
code name money
01 corp1 150
01 corp1 200
02 corp2 300
用两位给的方法可以算02的增长,但01增长就出现乱匹配了
怎么在不改变表的结构情况下实现一一匹配
如果不行,我怎么计算总量的增长

谢谢
 
select t1.Code, t1.Name, sum(t1.Money), sum(t2.Money), (sum(t2.Money)-sum(t1.Money))/sum(t1.Money)
from t1 join t2 on t1.Code=t2.Code
group by t1.Code, t1.Name
如果一个Code只在一个表存在,会出现null值,可以转换为0.但又有可能出现0分母.所以没敢带你转过来.
 
我现在能算总量了
select code,name,(sum(table1.money)-sum(table2.money))/sum(table1.money) from table1,table2 where table1.code=table2.code
group by code,name

不过还想实现一一匹配
该怎么写
 
刚发现一个问题
在计算01的总量时,实际是算了两遍,即总量是实际的2倍

怎么办呢
 
你的表结构有问题。
你应再加一个字段,以区分2个‘01’
 
to ericimex01,谢谢提醒
table1中记录为:
code name kind money
01 corp1 01 100
01 corp1 02 150
02 corp2 01 200

table2中记录为
code name kind money
01 corp1 01 150
01 corp1 02 200
02 corp2 01 300
03 corp3 01 400

select table1.Code, table2.Name, sum(table.money), sum(table2.money), (sum(table1.money)-sum(table2.money))/sum(table2.money)
from table1 inner join table2 on table1.monye=table2.code and table1.kind=table2.kind
group by table1.Code, table1.Name

这样可以显示table2对table1的增长情况,sum结果也是正确的
不过又发现了一个问题 (leechange也提到了)
table2中的新记录没法体现出来
各位有什么解决办法
 
那要看你怎么处理了?
如果有新记录,你的同比增长应该是多少呢? 100%? 0%? 还是其他?
 
可以不显示,做个标记就行了,这样该怎么实现

 
可以用左外连接,通过Case语句使新记录为NULL
select case when table1.code is null then null else (table2.money-table1.money)/table1.money end
from table1,table2
where table2.code*=table1.code
 
非常感谢诸位的答复
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
963
DelphiTeacher的专栏
D
I
回复
0
查看
928
import
I
顶部