恳请高手指点迷津。(100分)

  • 主题发起人 主题发起人 yun.li
  • 开始时间 开始时间
Y

yun.li

Unregistered / Unconfirmed
GUEST, unregistred user!
本人以前一直是用VFP编程序,学习Delphi也有一段时间了,但是有几个问题却始终没弄明白。
我现在正在做一个数据库程序,是一个人事工资方面的。采用Access数据库。
数据表有人员表,部门表,人员性质表,学历表等。[每张表都有主键,有的设置了外键]
[人员表] ID(流水号,主键),Name,Id_Dept(部门编号,外键),Id_zbxz(人员性质代码,外键)
[部门表] Code(部门编号,主键),Name(部门名称)
[人员性质表] Code(人员性质编号,主键),Name(人员性质名称)
。。。
在录入完每个员工信息之后要计算汇总[按部门、人员性质,学历等汇总]并且要打印输出。
在报表重要反映全部汇总数据,部门汇总数据,部门内还要按人员性质汇总,明细表
问题是在中间计算过程中,原先在用VFP时我总是临时生成一些中间表保存全部汇总数据,部门汇总数据,部门内指标性质汇总数据,
最后追加合成所需报表要求的最终结果数据表。Delphi是不是也要用到中间数据表,这些表是不是要预先创建,
我试过用 Select * from 数据表1 into 临时表名称 //drop table 临时表名称
但是好像不能从多个数据表中选择字段输出到一个临时表

我还想过预先设定好打印表,再用记录类型的数组存放中间数据(Select sum(...) 汇总),最后追加到打印表中。
但是这样是不是太繁琐了?
中间结果,打印报表,我现在用的数据表都设定了主键,。。。。我现在做了录入程序后,就不知道怎么写计算代码了。
我现在是一筹莫展,恳请热心的高手认真仔细的指点迷津。到底应该用什么方法??
如能指点一二、本人将不胜感激!!! 谢谢!!!

 
横向计算用计算字段.纵向计算只能用SQL的 sum(..)了........
 
补充一下,我后来发现用Select into可以从两个数据表中选择字段输出到临时表中。
但是Select 语句中统计数据时
Select dept,sum(数值字段1),sum(数值字段2),...,sum(数值字段n) From 数据表
但是这样就不能够在汇总表中包含其他非数值型字段比如:性别,姓名等,这是困扰我的最大的难题。
请问怎样既保留所需的非数值型字段又统计所需数据??
 
对Access不是很熟,试试这句行不行
Select a.dept,
(select 性别 from 数据表 where dept=a.dept)as 性别,
(select 姓名 from 数据表 where dept=a.dept)as 姓名,
sum(a.数值字段1),sum(a.数值字段2),...,sum(a.数值字段n)
From 数据表 a group by a.dept
 
>>但是这样就不能够在汇总表中包含其他非数值型字段比如:性别,姓名等
这是不可能的。你的汇总表完全可以包含多种字段类型。
你只要注意字段的顺序就行了,因为如果你不指定的话,
插入的时候select 字段 into 字段 是按照默认从左到右的顺序来的
另外这之前你需要update table set
 
为什么要用临时表呢,使用SQL的将数据按部门(或你所要的各种分类)排序取出来后,在报表的
分组统计中使用SUM不就可以了,如果分类比较多,那么就在报表中多设几分组,一组套一组的
统计打印
这是我的看法,不一定对
 
yoking,你好按照你说的方法我在D6的SQL Explorer中以下语句正确执行[ODBC连接access数据库]
select a.dept,
(select top 1 name from sys_dept where dept=a.dept) as 单位名称,
(select top 1 cpmc from d_msjg where dept=a.dept) as 品名代码,
(select top 1 name from sys_pz b,d_msjg c where b.code=c.cpmc and c.dept=a.dept) as 品名,
sum(a.syjc),sum(a.byxs)
into abcd
from d_msjg a
group by a.dept
 
多人接受答案了。
 
后退
顶部