求SQL语言:如何给这样的ACESS数据表汇总?(100分)

  • 主题发起人 主题发起人 nblgy
  • 开始时间 开始时间
N

nblgy

Unregistered / Unconfirmed
GUEST, unregistred user!
ACESS数据表gcybb ,用ADOQUERY连接
表结构如下
id bh mc gzl
1 0 总公司
2 1 第一分公司
3 1.1 中山路工程 100
4 1.2 解放路工程
5 1.2.1 解放路工程道路 100
6 1.2.2 解放路工程下水道 200
7 2 第二分公司
. . . .
. . . .
. . . .
编号(bh)规则是这样的 *----总公司及各分公司
*.*----工程
*.*.*---工程下面的子项
问题是哪些工程有子项,哪些工程没有子项未知。
现在要汇总出总公司的GZL,各分公司的GZL,有子项工程的GZL。
求SQL语言
 
1) Select * from....group by [bh] 得到第一个RecordSet (company)
2) for I := 0 to RecordCount - 1 do ... 得到第二个RecordSet (project)
3) 同第二步, 得到第三个RecordSet (sub project)

这样将得到多个的RecordSet,关键是Group By
 
对ACCESS我不熟悉,在Sybase中可以这样实现:
select mc, sum(gzl) from gcybb group by 消除第二个.及其后内容的bh值。
(其中用到几个Sybase的函数,ACCESS中不知道怎么处理。
如果bh不会有10.10.10或100.1.1,只有9.9.9这样的值,就很简单了,用SUBSTRING(bh,1,3),
否则就麻烦点,要用到patindex等几个函数。)
 
不如简单些,全部选出,做成dataset.然后用循环检索,这样比用sql快
例如:
for i:=0 to dataset.recordcount -1 to
begin
ii:=pos('.',dataset.fieldbyname(bh).asstring);

if ii= 0 then
gzl_zonggongsi :=gzl+dataset.fieldbyname(bh).asinteger
else
begin
tempstring:=copy(dataset.fieldbyname(bh).asstring,i,255);
if pos('.',tempstring)=0 then
gzl_fengongsi :=gzl+dataset.fieldbyname(bh).asinteger
else
gzl_fenxiangmu :=gzl+dataset.fieldbyname(bh).asinteger

end

end
else
for i:=0 to dataset.recordcount -1 to
begin
pos(dataset.fieldbyname(bh).asstring)= 0 then
gzl :=gzl+dataset.fieldbyname(bh).asinteger;
end;

 
直接按bh排序就可以了。
 
后退
顶部