用户变量的:@变量;
定义全局变量的:set GLOBAL 变量名 或者 set @@global.变量名;
局部变量:declare 变量名 类型
DELIMITER $$
DROP PROCEDURE IF EXISTS `rhtd_account_report_proc`$$
CREATE PROCEDURE `rhtd_callcenter`.`rhtd_account_report_proc`(IN userids VARCHAR(2000),IN starttimeStart VARCHAR(20),IN starttimeEnd VARCHAR(20),IN timespanlong VARCHAR(10))
BEGIN
DECLARE ids VARCHAR(2000);
DECLARE selectsql VARCHAR(2000);
DECLARE conditionsql VARCHAR(2000);
DECLARE replace_ VARCHAR(2000);
SET selectsql =' SUM(CASE WHEN bill.calltype = 50 THEN 1 ELSE 0 END)+SUM(CASE WHEN bill.calltype = 51 THEN 1 ELSE 0 END) CallIn,
SUM(CASE WHEN bill.calltype = 50 THEN IFNULL(timespanlong,0) ELSE 0 END) AS CallInTimelong,
SUM(CASE WHEN bill.calltype = 51 THEN 1 ELSE 0 END) InvalidIn,
FORMAT((1- IFNULL(SUM(CASE WHEN bill.calltype = 51 THEN 1 ELSE 0 END)/(SUM(CASE WHEN bill.calltype = 50 THEN 1 ELSE 0 END)+SUM(CASE WHEN bill.calltype = 51 THEN 1 ELSE 0 END)),1))*100,2) succRate,
SUM(CASE WHEN bill.calltype = 52 THEN 1 ELSE 0 END) CallOut,
SUM(CASE WHEN bill.calltype = 52 THEN IFNULL(timespanlong,0) ELSE 0 END) AS CallOutTimelong,
SUM(CASE WHEN bill.calltype = 53 THEN 1 ELSE 0 END) InvalidOut,
SUM(IFNULL(timespanlong,0)) CallTimelong,
bill.createdby,
user.name ';
SET conditionsql = ' WHERE 1=1 ';
IF ISNULL(userids) || LENGTH(TRIM(userids))<1 THEN
SET ids = '';
ELSE
SET replace_ = REPLACE(userids,',',''',''');
SET ids =CONCAT('''',replace_,'''');
SET replace_ = CONCAT('(',ids,')');
SET conditionsql = CONCAT(conditionsql,' and bill.createdby IN ',replace_);
END IF;
IF NOT ISNULL(starttimeStart) && LENGTH(TRIM(starttimeStart))>1 THEN
IF NOT ISNULL(starttimeEnd) && LENGTH(TRIM(starttimeEnd))>1 THEN
SET conditionsql = CONCAT(conditionsql,' and bill.starttime BETWEEN ',starttimeStart,' AND ',starttimeEnd);
END IF;
END IF;
IF NOT ISNULL(timespanlong) && LENGTH(TRIM(timespanlong))>1 THEN
SET conditionsql = CONCAT(conditionsql,' and bill.timespanlong >= ',timespanlong);
END IF;
SET conditionsql = CONCAT(conditionsql,' GROUP BY bill.createdby');
/*
*将生成的sql放到用户变量中
*/
SET @sqlAll2 = CONCAT('select ',selectsql,' from rhtd_bill bill LEFT JOIN base_account USER ON bill.createdby = user.id ', conditionsql);
/*
*将结果集存放到虚拟表stmt中
*/
PREPARE stmt FROM @sqlAll2;
EXECUTE stmt;
/*
释放虚拟表
*/
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;