CREATE PROCEDURE `spLeaves`(IN LId BIGINT, IN EIds LONG VARCHAR, IN McIds LONG VARCHAR,
IN DIds LONG VARCHAR, IN SdIds LONG VARCHAR, IN ObIds LONG VARCHAR,
IN fromdate VARCHAR(15), IN todate VARCHAR(15), IN stats VARCHAR(25))
BEGIN
SELECT
levs.LeaveId AS id,
levs.EmployeeId, levs.REmployeeId,
CONCAT('L', LPAD(IFNULL(levs.LeaveId,0), 5, '0')) AS LeaveNo,
ldateformat(levs.RequestDate) AS RDate,
sdateformat(levs.StartDate) AS SDate,
sdateformat(levs.EndDate) AS EDate,
CONCAT(sdateformat(levs.StartDate),' to ',sdateformat(levs.EndDate)) AS Period,
CONCAT(levstyp.LeaveTypeName,' Leave') AS title,
levs.*, levstyp.LeaveTypeName AS Nature, spc.SpecialLeaveName,
CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName, emp.LeaveCategoryId,
CONCAT(emp2.FirstName,' ',emp2.LastName) AS LeaveBy,
CASE levs.IsMedicalCertificate WHEN 1 THEN "Yes" ELSE "No" END AS Medical,
(SELECT CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS ApprovedBy,
(SELECT ldateformat(apr.Date) AS ADate FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS ApprovedDate,
(SELECT apr.GrantedDays FROM tblemployees AS emp INNER JOIN tblapproveleaves AS apr ON emp.EmployeeId = apr.EmployeeId WHERE apr.LeaveId = levs.LeaveId ORDER BY LeaveApproveId DESC LIMIT 1) AS GrantedDays,
(SELECT CONCAT(emp.FirstName,' ',emp.LastName) AS EmployeeName FROM tblemployees AS emp INNER JOIN tblleavescancellation AS cls ON emp.EmployeeId = cls.EmployeeId WHERE cls.LeaveId = levs.LeaveId ORDER BY LeaveCancellationId DESC LIMIT 1) AS CancelledBy,
(SELECT ldateformat(cls.Date) AS CDate FROM tblemployees AS emp INNER JOIN tblleavescancellation AS cls ON emp.EmployeeId = cls.EmployeeId WHERE cls.LeaveId = levs.LeaveId ORDER BY LeaveCancellationId DESC LIMIT 1) AS CancelledDate
FROM
tblleaves AS levs INNER JOIN
tblleavestypes AS levstyp ON levs.LeaveTypeId = levstyp.LeaveTypeId LEFT JOIN
tblspecialleaves AS spc ON levs.SpecialLeaveId = spc.SpecialLeaveId INNER JOIN
tblemployees AS emp ON levs.EmployeeId = emp.EmployeeId LEFT JOIN
tblemployees AS emp2 ON levs.REmployeeId = emp2.EmployeeId
WHERE
(levs.LeaveId = LId OR LId = 0)
AND
(FIND_IN_SET(levs.EmployeeId, EIds) OR EIds IS NULL)
AND
(FIND_IN_SET(emp.LeaveCategoryId, McIds) OR McIds IS NULL)
AND
(DATE_FORMAT(levs.RequestDate,'%Y-%m-%d') BETWEEN DATE_FORMAT(fromdate,'%Y-%m-%d') AND DATE_FORMAT(todate,'%Y-%m-%d') OR fromdate IS NULL)
AND
(levs.Status = stats OR stats IS NULL)
ORDER BY
levs.LeaveId DESC;
END
또한 아마 ... 그 작업이 .... – trogdor
감사를 원한다 모두 –