我的软件是工资系统,现在我在做工资录入部分,我想实现的功能是点击添加,先在数据库里搜索到每一个员工上个月的工资,然后改个月份,也就是下面的Pay_Yuefen(string)字段重新插入GDB_Pay表,同时显示在DBGRID中做一些修改。现在的问题是,我在DBGRID中显示的不仅包括GDB_Pay中的所有项(除Pay_ID外),还有GDB_Employee中的Employee_ID字段。
以下是我用来搜索上月工资的SQL语句:()
select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen我该使用何种方式实现我的目的,如果是要建立临时表,能否详细说明,我是菜鸟,什么都不懂啊。分不够再开新帖,解决为止。以下是我的数据库结构
表1: GDB_Employee (本行人员表)
字段 说明 类型 大小 主键 非空
autoid 自动编号 Int 4 PK T
Employee_ID 人员编号 Char 10 T
Employee_Name 姓名 Char 10 T表3:GDB_Pay (工资表)
字段 说明 类型 大小 主键 非空
Pay_ID 自动编号 Int 4 PK T
Pay_YueFen 月份 Char 8 T
User_Name 姓名 Char 8 T
BiaoZhunGZ 标准工资 Float 8 T
FuDongGZ 浮动工资 Float 8 T
JiaBanGZ 加值班费 Float 8 T
Other_A 其他 Float 8 T
Other_B 其他 Float 8 T
YingDeGZ 应得工资 Float 8 T
YangLaoJin 养老金 Float 8 T
GongJiJin 公积金 Float 8 T
DaiYeJin 待业金 Float 8 T
BingShiJia 病事假 Float 8 T
QiTaKou 其他扣 Float 8 T
ShiFaGZ 实发工资 Float 8 T
以下是我用来搜索上月工资的SQL语句:()
select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen我该使用何种方式实现我的目的,如果是要建立临时表,能否详细说明,我是菜鸟,什么都不懂啊。分不够再开新帖,解决为止。以下是我的数据库结构
表1: GDB_Employee (本行人员表)
字段 说明 类型 大小 主键 非空
autoid 自动编号 Int 4 PK T
Employee_ID 人员编号 Char 10 T
Employee_Name 姓名 Char 10 T表3:GDB_Pay (工资表)
字段 说明 类型 大小 主键 非空
Pay_ID 自动编号 Int 4 PK T
Pay_YueFen 月份 Char 8 T
User_Name 姓名 Char 8 T
BiaoZhunGZ 标准工资 Float 8 T
FuDongGZ 浮动工资 Float 8 T
JiaBanGZ 加值班费 Float 8 T
Other_A 其他 Float 8 T
Other_B 其他 Float 8 T
YingDeGZ 应得工资 Float 8 T
YangLaoJin 养老金 Float 8 T
GongJiJin 公积金 Float 8 T
DaiYeJin 待业金 Float 8 T
BingShiJia 病事假 Float 8 T
QiTaKou 其他扣 Float 8 T
ShiFaGZ 实发工资 Float 8 T
///////////////
你这样肯定是显示所有字段三
我查了没全部显示,除了两个AUTOID都显示了。
select a.Employee_Name,b.(除了Pay_ID的所有字段),c.maxYueFen from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen
能麻烦你教我具体怎么写吗?我没用过,不知道怎么实现,谢谢
select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen
--插入把dgrid联系到resulttbl这个表去操作.不过不明白你为什么非要对这个数据集来操作,感觉没有意义.
query有个特性,就是多表查询的结果不能修改,如果非要修改的话,
所以dbgrid的dataset的查询语句这样写:
select a.*,b.*,c.* from GDB_Employee a ,GDB_Pay b ,(select User_Name,max(Pay_YueFen) as maxYueFen from gdb_pay group by User_Name) c where a.Employee_Name=b.User_Name and c.User_Name=b.User_Name and c.maxYueFen=b.Pay_YueFen into #temptable--存入临时表select * form #temptable--返回结果
请楼主把要求显示在DBGrid中的字段罗列出来。
我原来就是这样做的,可他们说连着点确定也是很麻烦的,所以我就郁闷了,看来我的数据库中得多建一张表用来临时操作了。to wizardqi(男巫) :
我要显示的是除Pay_ID外的所有GDB_Pay表中的内容和GDB_Employee表中的Employee_ID(就是这字段害人,可他们非要)
字段 说明 类型 大小 主键 非空
Employee_ID 人员编号 Char 10 T
Pay_YueFen 月份 Char 8 T
User_Name 姓名 Char 8 T
BiaoZhunGZ 标准工资 Float 8 T
FuDongGZ 浮动工资 Float 8 T
JiaBanGZ 加值班费 Float 8 T
Other_A 其他 Float 8 T
Other_B 其他 Float 8 T
YingDeGZ 应得工资 Float 8 T
YangLaoJin 养老金 Float 8 T
GongJiJin 公积金 Float 8 T
DaiYeJin 待业金 Float 8 T
BingShiJia 病事假 Float 8 T
QiTaKou 其他扣 Float 8 T
ShiFaGZ 实发工资 Float 8 T
--------------------------------------------------------------
然后把每个员工信息以及工资信息添进去。
当然在造表前你可以这样做:
update GDB_PayTemplate set Pay_YueFen='当前年月'
然后DBGrid显示所有的GDB_PayTemplate中的内容,更改一些必须更改的内容后Post一下;
接下来你可以这样做:
insert into GDB_Pay select Pay_YueFen,User_Name,BiaoZhunGZ,FuDongGZ,JiaBanGZ,Other_AOther_B,YingDeGZ,YangLaoJin,GongJiJin,DaiYeJin,BingShiJia,QiTaKou,ShiFaGZ from GDB_PayTemplate一切OK! ^_^