SQL查询问题(100分)

F

farce

Unregistered / Unconfirmed
GUEST, unregistred user!
有四个表
A表: A_ID D_ID A1 A2
B表: B_ID D_ID B1 B2
C表: C_ID D_ID C1 C2
D表: D_ID D1
需要用SQL的SELECT组合查询出下表
D1 SUM(A1) AS S_A SUM(A2) SUM(B1) AS S_B SUM(B2) SUM(C1) SUM(C2) (S_A-S_B) AS S_AB
ABC三表与D表相联系,D1要GROUP
 
如果每个表中的记录都是一对一好办
select D1,S_A,S_A2,S_B,S_B2,S_C,S_C2,S_A-S_B S_AB from (
select D1,SUM(A1) S_A,SUM(A2) S_A2,SUM(B1) S_B,SUM(B2) S_B2,SUM(C1) S_C,SUM(C2) S_C2
from D join a on d.D_ID=a.D_ID join b on d.D_ID=b.D_ID join c on d.D_ID=c.D_ID group by D1.D_ID
)
如果是一对多就麻烦了,要用外连接,D表Left Join另外三个表
 
你的问题太简单拉
[:D]
 
To ysai:
我试了,是我最初想错了,把ABC其中一个表当主表了,但是DELPHI的SQL报错,
指出你写的第二行不通,我想是DELPHI的SQL不支持嵌套?我是直接写在QUERY1中的SQL的。
一对一,是D表中的D_ID对所有表中的D_ID?
一对多为什么麻烦?能否指明?
请教请教!!!
 
不是DELPHI的SQL不支持,而要看你是什么数据库,我写的SQL在SQLSERVER中可行,
不过忘了个别名
select D1,S_A,S_A2,S_B,S_B2,S_C,S_C2,S_A-S_B S_AB from (
select D1,SUM(A1) S_A,SUM(A2) S_A2,SUM(B1) S_B,SUM(B2) S_B2,SUM(C1) S_C,SUM(C2) S_C2
from D join a on d.D_ID=a.D_ID join b on d.D_ID=b.D_ID join c on d.D_ID=c.D_ID group by D1.D_ID
) A
如果是ACCESS之类的就不一定可行了:(
我在ACCESS中还没用过联接,不过也可以改成
select D1,S_A,S_A2,S_B,S_B2,S_C,S_C2,S_A-S_B S_AB from (
select D1,SUM(A1) S_A,SUM(A2) S_A2,SUM(B1) S_B,SUM(B2) S_B2,SUM(C1) S_C,SUM(C2) S_C2
from D,A,B,C
where d.D_ID=a.D_ID and d.D_ID=b.D_ID and d.D_ID=c.D_ID
group by D1.D_ID
)
如果不行,就用三层嵌套,先把记录联接起来,再分组汇总,最后求S_AB
 
select d.d1,sum(a1) as s_a,sum(a2),SUM(b1) as s_b,sum(b2),sum(c1),sum(c2),
(sum(c1)-sum(c2)) as s_ab
from d left outer join
c on d.d_id=c.c_id left outer join]
b on d.d_id=b.b_id left outer join
a on d.d_id=a.a_id left outer join
group by d.d1
 
to ysai
select *
from (select * from a) b
此句在DELPHI中不通,如果在SQL SEVERS中行通,但在DELPHI中QUERY中不行。
 
多人接受答案了。
 
顶部