下面提到的查询未在 Oracle Sql 中编译,该查询有什么问题
选择出勤 ID,E.FIRSTNAME || ' ' || E.LASTNAME AS 全名、E.EmpID、E.JobCode、E.Address 作为位置、E.VSMS_Id、A.LoginId、upper(ShiftName) ShiftName,To_char(AttendanceDate, 'dd-MMM-yy') attendanceDate, to_char(出勤日期,'ddd')作为 dayName1,
TO_CHAR(ShiftStartTime,'hh:mm tt') ShiftStartTime, TO_CHAR(ShiftEndTime,'hh:mm tt') ShiftEndTime,
TO_CHAR((登出、登入)/60 )|| '小时' || ':'|| SUBSTR('0' + TO_CHAR((登出,登入)%60)(2)),
GREATEST(-LENGTH('0' + TO_CHAR(DATEDIFF(SignOutMinute -SignIn, SignOut)%60 AS VARCHAR2(2))), -2))||'分钟为持续时间、登录、退出、来自 T_ATTENDANCE_ATTENDANCE A 的备注
左加入 USERMASTER U ON U.LOGINID = A.LOGINID
左连接 EMPLOYEEMASTER E ON E.EMPID = U.EMPID
其中 EXTRACT(自参加日期起的年份) = V_YEAR 并且 EXTRACT(自参加日期起的月份) = V_MONTH 并且 A.active = 1
并且 a.LoginId = case when nvl(V_LoginId,'') = '' then a.LoginId else V_LoginId end
按 A.AttendanceDate ASC 订购
--------------------------------------------------------------------------------------------------------------------------------------
SELECT E.FIRSTNAME || ' ' || E.LASTNAME AS FullName, E.EmpID, E.JobCode, E.Address as Location,
E.VSMS_Id, A.LoginId,upper(ShiftName) ShiftName, To_char(AttendanceDate, 'dd-MMM-yy') AttendanceDate,
to_char(AttendanceDate, 'ddd') as dayName1, SignIn, SignOut,
TO_CHAR( (SignOut -SignIn) * 1440/60 (5))|| ' Hrs' || ':'|| SUBSTR('0' + TO_CHAR( (SignOut -SignIn) * 1440%60 (2)), GREATEST(-LENGTH('0' + TO_CHAR( DATEDIFF(SignOutMinute -SignIn, SignOut) * 1440%60 AS VARCHAR2(2))), -2))||' Min' as Duration,
case When upper(ShiftName) = 'MORNING' then 1
When upper(ShiftName) = 'GENERAL1' then 2
When upper(ShiftName) = 'GENERAL2' then 3
when upper(ShiftName) = 'AFTERNOON1' then 4
when upper(ShiftName) = 'AFTERNOON2' then 5
When upper(ShiftName) = 'NIGHT' then 6
else 7 end ShiftOrder
FROM T_ATTENDANCE_ATTENDANCE A
LEFT JOIN T_ATTENDANCE_USER_MASTER U ON U.LOGINID = A.LOGINID
LEFT JOIN T_ATTENDANCE_EMPLOYEE_MASTER E ON E.EMPID = U.EMPID
Join T_ATTENDANCE_USER_ATTENDANCE_TEAM uat on uat.LoginId = U.LoginID and uat.isActive = 'Y' and uat.TowerPK =
case when nvl(V_Tower,'') = '' then '' else V_Tower end
and A.Active = 1
AND ATTENDANCEDATE= V_AttendanceDate
简单来说,那不是 Oracle。
我评论了部分代码,这些代码肯定不会工作,因为
datediff
功能%60
也是错误的;我不知道它在你使用的语言中的作用我尝试尽可能多地修复它并理解。
SELECT attendanceid,
e.firstname || ' ' || e.lastname AS fullname,
e.empid,
e.jobcode,
e.address AS location,
e.vsms_id,
a.loginid,
UPPER (shiftname) shiftname,
--
TO_CHAR (attendancedate, 'dd-mon-yy') attendancedate,
-- TO_CHAR (attendancedate, 'dd-MMM-yy') attendancedate,
--
TO_CHAR (attendancedate, 'ddd') AS dayname1,
--
TO_CHAR (shiftstarttime, 'hh:mi') shiftstarttime,
-- TO_CHAR (ShiftStartTime, 'hh:mm tt') ShiftStartTime,
--
TO_CHAR (shiftendtime, 'hh:mi') shiftendtime,
-- TO_CHAR (ShiftEndTime, 'hh:mm tt') ShiftEndTime,
/*
TO_CHAR((SignOut,SignIn)/60 )|| ' Hrs' || ':' || SUBSTR('0' || TO_CHAR( (SignOut,SignIn)%60)(2)),
GREATEST(-LENGTH('0' + TO_CHAR(DATEDIFF(SignOutMinute -SignIn, SignOut)%60 AS VARCHAR2(2))), -2))||' Min' as Duration,
*/
signin,
signout,
Remark
FROM t_attendance_attendance a
LEFT JOIN usermaster u ON u.loginid = a.loginid
LEFT JOIN employeemaster e ON e.empid = u.empid
WHERE EXTRACT (YEAR FROM attendancedate) = v_year
AND EXTRACT (MONTH FROM attendancedate) = v_month
AND a.active = 1
AND a.loginid = NVL (v_loginid, a.loginid)
-- CASE WHEN NVL (v_loginid, '') = '' THEN a.loginid ELSE v_loginid END
ORDER BY a.attendancedate ASC;