『!工资管理,查询和其他~~~~!』(200分)

  • 主题发起人 主题发起人 YuanGuo2001
  • 开始时间 开始时间
Y

YuanGuo2001

Unregistered / Unconfirmed
GUEST, unregistred user!
工资录入表的字段如下
职工号, 姓名,工序号,产品,数量,单价,小计价格,录入时间
示范记录: 001 , 张三 ,888, 开关,10 , ¥10,¥100 2002-05-04
001 , 张三 ,999, 开关,20 , ¥20,¥400 2002-05-04
002 , 李四 ,888, 开关,15 , ¥10,¥150 2002-05-04
003 , 李四 , 777, 开关,10 , ¥7 ,¥70 2002-05-04
其中字段“小计价格”是由字段”数量“和单价通过计算字段得到的哦(filedcalc)
现在我想通过上面的表生成新的表:总工资表(total)
总工资表由下面字段组成:职工号,总工资,日期范围
我的方法是想通过Tquety查询得到某某职工在某个时间内的记录,然后
计算他的总工资,然后把此记录弄到total表中作为一个记录。以此重复~~
因为我初学数据库,不知道怎么实现,望高手指点,200分奉上(请讲讲具体
方法和关键源码!)。
 
1、按编号(/姓名)索引
2、按编号(/姓名)分组统计(可在报表里完成)
 
select 职工号,sum(产品*数量) as 总工资, '五月' as 日期范围 from 工资录入表 where 录入时间
between '2002-05-1' and '2002-05-31' group by 职工号
只是示例。如果是日期型数据,不同数据库处理不同。
 
可以在楼上的前面加上一个临时表,表里是消除了想同行的数据
用select distinct(职工号) from table取出来就可以了!
 
to:
我把
table2.tablename为payroll.db(工资录入表),datesource1.dateset为
table2,dbgrid.datesoure为datesource1。
执行下面语句,dbgrid显示的数据还是与工资录入表一模一样的!!
到底总工资表改怎样生成的?我急需答案,望指点!!在线等待~~~~
解决了就给分,分数少可以再加~~~~~(急死了)
procedure TTotal_Frm.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select distinct(id),payroll as totalpay from table2 ,pay as paytotal where date between ''2002-05-01'' and ''2002-05-02''');
Query1.ExecSQL;
end;
 
我认为基本思路是这样的:
1.用TQuery对“工资录入表”进行检索和汇总
其中SQL语句这样写“select 职工号,sum(产品*数量) as 总工资, '五月' as 日期范围 from 工资录入表 where 录入时间
between '2002-05-1' and '2002-05-31' group by 职工号”
2.将检索出的纪录集依次写入“总工资表”中
Table.Append;
Table.FieldByName('职工号').AsString:=Query.Fields[0].AsString;
......
Table.Post;
利用循环语句写每一条检索出的纪录就可以了。
如果还不清楚,你把两个表的名称和具体的字段名称写出来,我写具体的代码给你!
 
具体代码可以这样:
procedure TTotal_Frm.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select id,sum(小计价格)as totalpay from table2 where date between ''2002-05-01'' and ''2002-05-02''group by id');
Query1.ExecSQL;
if 总工资表.Active<>True then
总工资表.Active:=True;
总工资表.Append;
总工资表.FieldByName('id').AsString:=Query1.Fields[0].AsString;
总工资表.FieldByName('Totalpay').AsFloat:=Query1.Fields[1].AsFloat;
总工资表.FieldByName('日期范围').AsString:='五月')
总工资表.Post;
end
 
已经自己解决了!
 
后退
顶部