MySQL写一个存储过程:输入参数:部门名(可以为空,空就是查询所有)、员工名(可以为空,空就是查询所有)、某年某月(可以为空,空就是查询所有),输出来源表部门员工从月初到月末的活动量(没有显示零)
时间: 2023-05-29 11:04:25 浏览: 69
DELIMITER //
CREATE PROCEDURE `sp_activity_report`(
IN p_department_name VARCHAR(50),
IN p_employee_name VARCHAR(50),
IN p_year_month VARCHAR(7)
)
BEGIN
DECLARE start_date DATE;
DECLARE end_date DATE;
IF p_year_month IS NULL THEN
SET start_date = DATE_FORMAT(NOW(), '%Y-%m-01');
SET end_date = LAST_DAY(NOW());
ELSE
SET start_date = CONCAT(p_year_month, '-01');
SET end_date = LAST_DAY(start_date);
END IF;
SELECT
d.department_name,
e.employee_name,
COUNT(a.activity_id) AS activity_count
FROM
departments d
INNER JOIN employees e ON d.department_id = e.department_id
LEFT JOIN activities a ON e.employee_id = a.employee_id
WHERE
(d.department_name = p_department_name OR p_department_name IS NULL)
AND (e.employee_name = p_employee_name OR p_employee_name IS NULL)
AND (a.activity_date BETWEEN start_date AND end_date OR a.activity_date IS NULL)
GROUP BY
d.department_name,
e.employee_name
HAVING
activity_count > 0;
END //
DELIMITER ;