现在有3个表.我想根据这3个表,新组成另外一个表prot
字段与表名如下:info (员工信息表)
---- -------
ID 员工ID
name 员工姓名unattinfo (非正常出勤信息表)
---- ----
ID ID
uID 员工ID
udate 上班日期
Amtype 上午非正常情况(旷工,请假)
pmtype 上午非正常情况(旷工,请假)attinfo (正常出勤信息表)
----- ------
ID ID
aID 员工ID
adate 上班日期
amlate 上午迟到分钟数
pmlate 下午迟到分钟数
tmlate 总迟到分钟数
amearly 上午早退分钟数
pmearly 下午早退分钟数
tmearly 总迟早退钟数
==========================================
根据上面的3个表。组成一个新表prot,想要的如下字段:
name 员工姓名 , amsut 上午出勤情况(包括,正常,迟到,早退,旷工,请假), pmsut下午出勤情况(同上午一样) ,
date上班日期, attday出勤天数备注:上午出勤情况要根据 unattinfo (非正常出勤信息表)与
attinfo (正常出勤信息表)的字段来判断
就是说:如果在某日员工上午迟到分钟数大于0 (在正常出勤信息表里)则上午出勤情况就是“迟到”如果是上午旷工(在非正常出勤信息表里)则上午出勤情况就是“旷工”了。
谢谢各位了。delphi程序判断与sql语句都要有啊。我会感激的,散分了,大侠。
字段与表名如下:info (员工信息表)
---- -------
ID 员工ID
name 员工姓名unattinfo (非正常出勤信息表)
---- ----
ID ID
uID 员工ID
udate 上班日期
Amtype 上午非正常情况(旷工,请假)
pmtype 上午非正常情况(旷工,请假)attinfo (正常出勤信息表)
----- ------
ID ID
aID 员工ID
adate 上班日期
amlate 上午迟到分钟数
pmlate 下午迟到分钟数
tmlate 总迟到分钟数
amearly 上午早退分钟数
pmearly 下午早退分钟数
tmearly 总迟早退钟数
==========================================
根据上面的3个表。组成一个新表prot,想要的如下字段:
name 员工姓名 , amsut 上午出勤情况(包括,正常,迟到,早退,旷工,请假), pmsut下午出勤情况(同上午一样) ,
date上班日期, attday出勤天数备注:上午出勤情况要根据 unattinfo (非正常出勤信息表)与
attinfo (正常出勤信息表)的字段来判断
就是说:如果在某日员工上午迟到分钟数大于0 (在正常出勤信息表里)则上午出勤情况就是“迟到”如果是上午旷工(在非正常出勤信息表里)则上午出勤情况就是“旷工”了。
谢谢各位了。delphi程序判断与sql语句都要有啊。我会感激的,散分了,大侠。
---- -------
ID 员工ID
name 员工姓名 create table info
(
ID varchar2(10),
name varchar2(10)
);insert into info(id,name) values(1,1);
insert into info(id,name) values(2,2);
insert into info(id,name) values(3,3);
insert into info(id,name) values(4,4);
unattinfo (非正常出勤信息表)
---- ----
ID ID
uID 员工ID
udate 上班日期
Amtype 上午非正常情况(旷工,请假)
pmtype 上午非正常情况(旷工,请假) create table unattinfo(
id varchar(20),
Fid varchar2(20),
udate date,
amtype varchar2(20),
pmtype varchar2(20)
);insert into unattinfo(id,fid,udate,amtype,pmtype) values(1,1,trunc(sysdate),'请假','矿工');
insert into unattinfo(id,fid,udate,amtype,pmtype) values(2,2,trunc(sysdate),'','矿工');attinfo (正常出勤信息表)
----- ------
ID ID
aID 员工ID
adate 上班日期
amlate 上午迟到分钟数
pmlate 下午迟到分钟数
tmlate 总迟到分钟数
amearly 上午早退分钟数
pmearly 下午早退分钟数
tmearly 总迟早退钟数 create table attinfo(
aid varchar2(10),
adate date,
amlate integer,
pmlate integer,
tmlate integer,
amearly integer,
pmearly integer,
tmearly integer
);insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(1,trunc(sysdate),0,0,0,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(2,trunc(sysdate),0,0,0,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(3,trunc(sysdate),0,1,1,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(4,trunc(sysdate),1,0,1,1,0,1);
commit;select info.name,
decode(unattinfo.amtype,null,
case when nvl(attinfo.amlate,0)>0 then '迟到'
when nvl(attinfo.amearly,0)>0 then '早退'
else '正常'
end
,unattinfo.amtype) 上午出勤情况,
decode(unattinfo.pmtype,null,
case when nvl(attinfo.pmlate,0)>0 then '迟到'
when nvl(attinfo.pmearly,0)>0 then '早退'
else '正常'
end
,unattinfo.pmtype) 下午出勤情况
from info,unattinfo,attinfo
where info.id = unattinfo.fid(+)
and info.id = attinfo.aid(+)
os: windows 2003
db: oracle 9.2.0.1
---- -------
ID 员工ID
name 员工姓名 create table info
(
ID varchar(10),
name varchar(10)
);insert into info(id,name) values(1,1);
insert into info(id,name) values(2,2);
insert into info(id,name) values(3,3);
insert into info(id,name) values(4,4);
unattinfo (非正常出勤信息表)
---- ----
ID ID
uID 员工ID
udate 上班日期
Amtype 上午非正常情况(旷工,请假)
pmtype 上午非正常情况(旷工,请假) create table unattinfo(
id varchar(20),
Fid varchar(20),
udate datetime,
amtype varchar(20),
pmtype varchar(20)
);insert into unattinfo(id,fid,udate,amtype,pmtype) values(1,1,getdate(),'请假','矿工');
insert into unattinfo(id,fid,udate,amtype,pmtype) values(2,2,getdate(),'','矿工');attinfo (正常出勤信息表)
----- ------
ID ID
aID 员工ID
adate 上班日期
amlate 上午迟到分钟数
pmlate 下午迟到分钟数
tmlate 总迟到分钟数
amearly 上午早退分钟数
pmearly 下午早退分钟数
tmearly 总迟早退钟数 create table attinfo(
aid varchar(10),
adate datetime,
amlate integer,
pmlate integer,
tmlate integer,
amearly integer,
pmearly integer,
tmearly integer
);insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(1,getdate(),0,0,0,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(2,getdate(),0,0,0,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(3,getdate(),0,1,1,0,0,0);
insert into attinfo(aid,adate,amlate,pmlate,tmlate,amearly,pmearly,tmearly)
values(4,getdate(),1,0,1,1,0,1);
select info.name,
case when unattinfo.amtype is null then
case when isnull(attinfo.amlate,0)>0 then '迟到'
when isnull(attinfo.amearly,0)>0 then '早退'
else '正常'
end
else unattinfo.amtype
end 上午出勤情况,
case when unattinfo.pmtype is null then
case when isnull(attinfo.pmlate,0)>0 then '迟到'
when isnull(attinfo.pmearly,0)>0 then '早退'
else '正常'
end
else unattinfo.pmtype end 下午出勤情况
from attinfo
left join unattinfo on attinfo.aid = unattinfo.fid
and convert(varchar(10),unattinfo.udate,120) = convert(varchar(10),attinfo.adate,120)
left join info on info.id = attinfo.aid
我看你还漏了2个字段
还有一个date(上班日期)
attday出勤天数 。
你建一个表,查询三个表里面的数据往表里面插入就是了!
begin
ADOQ.Connection := FrmDataModule.ADOCon;
ADOQ1.Connection := FrmDataModule.ADOCon;
ADOQ2.Connection := FrmDataModule.ADOCon;
ADOQ.Close;
ADOQ.SQL.Text := 'delete from show_laneTickets ';
ADOQ.ExecSQL; ADOQ.Close;
ADOQ.SQL.Text := 'select * from show_laneTickets ';
ADOQ.ExecSQL; ADOQ1.Close; ss:= ' select * '
+' from '+datatable+' '
+' where StatDate='+sStatYear+sStatMonth+sStatDay
+' and Shift='+sStatShift
+' and LaneID= '+laneid
+' and ( recordtype&4=4 or recordtype&2=2) '
+' order by OperateTime Asc';
ADOQ1.SQL.Text := ss; ADOQ1.Open;
ADOQ1.First;
while ADOQ1.Eof=false do
begin
ADOQ.Open;
ADOQ.Last;
ADOQ.Insert;
//ADOQ.FieldByName('operator').AsString:=laneid;
ADOQ.FieldByName('operator').AsString:=ADOQ1.FieldByName('operator').AsString;
operatorid:=ADOQ1.FieldByName('operator').AsString;
ADOQ2.Close; ss:= ' select * '
+' from '+usertable+' '
+' where '
+' userID= '+operatorid;
ADOQ2.SQL.Text := ss; ADOQ2.Open;
ADOQ.FieldByName('operatorName').AsString:=ADOQ2.FieldByName('username').AsString; recordtype:= ADOQ1.FieldByName('recordtype').AsInteger;
ADOQ.FieldByName('BeginTime').Asdatetime:=ADOQ1.FieldByName('OperateTime').Asdatetime;
BeginTime:= ADOQ1.FieldByName('OperateTime').AsString;
BeginTime:=FormatDateTime('yyyy-mm-dd hh:nn:ss',StrToDateTime(BeginTime));
ADOQ.FieldByName('BeginTicket').AsInteger:=ADOQ1.FieldByName('PrintNumber').AsInteger;
ADOQ.FieldByName('StatDate').AsInteger:=ADOQ1.FieldByName('StatDate').AsInteger;
ADOQ.FieldByName('Shift').AsInteger:=ADOQ1.FieldByName('Shift').AsInteger;
ADOQ.FieldByName('LaneID').AsInteger:=ADOQ1.FieldByName('LaneID').AsInteger; ADOQ1.Next;
recordtype:= ADOQ1.FieldByName('recordtype').AsInteger;
ADOQ.FieldByName('endTime').Asdatetime:=ADOQ1.FieldByName('OperateTime').Asdatetime;
endTime:= ADOQ1.FieldByName('OperateTime').AsString;
endTime:=FormatDateTime('yyyy-mm-dd hh:nn:ss',StrToDateTime(endTime)); ADOQ.FieldByName('endTicket').AsInteger:=ADOQ1.FieldByName('PrintNumber').AsInteger; ADOQ2.Close;
ss:= ' select count(*) as errorticket '
+' from '+datatable+' '
+' where StatDate='+sStatYear+sStatMonth+sStatDay
+' and Shift='+sStatShift
+' and LaneID= '+laneid
+' and (OperateTime >=''' +BeginTime+''''+') and (OperateTime <='''+endTime +''''
+') and RecordType&256 =256 and recordtype&128<>128 and recordtype&8<>8 '
+' and PrintNumber<>0 ';
ADOQ2.SQL.Text:=ss;
ADOQ2.Open;
ADOQ.FieldByName('ErrorTicket').AsInteger:=ADOQ2.FieldByName('ErrorTicket').AsInteger; ADOQ1.Next;
ADOQ.Post;
end;
ADOQ.Close;
//ADOQ.SQL.Text := 'select * from show_laneTickets ';
ss:= ' select * '
+' from show_laneTickets '
+' where StatDate='+sStatYear+sStatMonth+sStatDay
+' and Shift='+sStatShift
+' and LaneID= '+laneid
+' '
+' order by BeginTime Asc';
ADOQ.SQL.Text := ss;
ADOQ.ExecSQL;
RMDBDataSet.DataSet := ADOQ;
RMReport.LoadFromFile(TreeList.ColumnByName('ReportPathName').Values[Node.index]);
t := RMReport.FindObject('StationName');
if t <> nil then t.Memo.Text := sStationName;
//FrmWait.Free;
// RMReport.ShowReport;
end
参考一下,呵呵
不好意思啊。我试你的sql语句。在 " else unatt.amtype
end 上午出勤情況," 老通不过。。
1 请假 矿工
2 矿工
3 正常 迟到
4 迟到 正常
*/
end 上午出勤情況," 老通不过。。
注意:你把表名改了,原句:'else unattinfo.pmtype end 下午出勤情况'