多表统计的,请帮忙看一下(300分)

  • 主题发起人 主题发起人 doit
  • 开始时间 开始时间
D

doit

Unregistered / Unconfirmed
GUEST, unregistred user!
用DELPHI 和ACCESS ,通过ODBC
现有三张表
table hb (单位,项目号,划拨面积)
dw hbxmh hb
江阴 项目1 20
无锡 项目2 30
江阴 项目3 10

table cr (单位,项目号,出让面积)
dw crxmh cr
江阴 项目1 20
无锡 项目2 30
无锡 项目3 10
宜兴 项目4 50

table zl (单位,项目号,租赁面积)
dw zlxmh zl
江阴 项目1 20
无锡 项目2 30
宜兴 项目3 10
宜兴 项目4 70

现要得到如下统计表 table tj(单位,划拨项目数,出让项目数,租赁项目数)
dw hb cr zl
江阴 2 1 1
无锡 1 2 1
宜兴 0 1 2

请问如何在DELPHI中写SQL语句,
因为下星期就要交系统,所以比较急,希望大家帮帮我,
分数不会亏待大家的


 
1先建表TJ
2分别查询
select dw,count(dw) as hbs from hb group by dw
select dw,count(dw) as crs from cr group by dw
select dw,count(dw) as zls from zl group by dw
3把查询结果写到TJ上。
要更详细的代码,把邮件留下。

 
以下代码经过本人测试并通过:
select dw,hb=isNull(hb,0),cr=isNull(cr,0),zl=isNull(zl,0) from (
select * from
(select * from
(select Dw from hb union select dw from cr union select dw from zl) a
left join (select dw_hb=dw,hb=count(*) from hb group by dw ) b
on a.dw=b.dw_hb) tb1
left join (select dw_cr=dw,cr=count(*) from cr group by dw) c
on tb1.dw = c.dw_cr) tb2
left join (select dw_zl=dw,zl=count(*) from zl group by dw) d
on tb2.dw = d.dw_zl

由于是通过表联接来做的, 如果数据比较多的话效率可能不是很高,你试试。

 
差点忘了,我是在SQL Server 7.0 中通过的,Access中就不知道了。
 
SELECT dw.dw,
(SELECT COUNT(*) FROM hb WHERE dw = dw.dw) AS hb,
(SELECT COUNT(*) FROM cr WHERE dw = dw.dw) AS cr,
(SELECT COUNT(*) FROM zl WHERE dw = dw.dw) AS zl
FROM ( SELECT DISTINCT dw FROM hb
UNION
SELECT dw FROM cr
UNION
SELECT dw FROM zl) AS dw
以上代码未经测试。
 
各位大哥真是及时雨,我先试试。
TO panyongze ,我的邮箱是yaozhj@163.net,麻烦你
 
QiuLiang 兄的方法可以, 结构比我的清晰多了,
用的也是标准 SQL 语法,ACCESS应该能通过

可以将其中的 DISTINCT 选项去掉,多余的。
因为 UNION 操作对相同记录默认只保留一条。
 
我按QIULIANG的方法实现了,谢谢各位的帮助
 

Similar threads

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