mysql stored procedure passes in parameters to realize dynamic column query
DROPPROCEDUREIFEXISTS work_order_num;CREATEPROCEDURE work_order_num(IN proId VARCHAR(255),IN userName VARCHAR(64))BEGINSET@EE='';SET@proId= proId;SET@userName= userName;SELECT b.*into@EEfrom(SELECT@EE:=CONCAT(@EE,'SUM(IF(month=''',update_date1,'''',',work_order_num,0)) AS ''',update_date1,''',') col
FROM(SELECT DATE_FORMAT(date_add(curdate(),interval-6month),'%Y-%m') update_date1
UNIONSELECT DATE_FORMAT(date_add(curdate(),interval-5month),'%Y-%m') update_date1
UNIONSELECT DATE_FORMAT(date_add(curdate(),interval-4month),'%Y-%m') update_date1
) A) b ORDERBY b.col desclimit0,1;SET@EE1='';SELECT b.*into@EE1from(SELECT@EE1:=CONCAT(@EE1,'SUM(IF(month=''',update_date1,'''',',work_order_num,0)) AS ''',update_date1,''',') col
FROM(SELECT DATE_FORMAT(date_add(curdate(),interval-3month),'%Y-%m') update_date1
UNIONSELECT DATE_FORMAT(date_add(curdate(),interval-2month),'%Y-%m') update_date1
UNIONSELECT DATE_FORMAT(date_add(curdate(),interval-1month),'%Y-%m') update_date1
) A) b ORDERBY b.col desclimit0,1;if@userName!='admin'THENif@proId=''THENSET@QQ=CONCAT('SELECT tb.project_name,
sm.id manufactor_id,
sm.name manufactor_name,',CONCAT(@EE,LEFT(@EE1,LENGTH(@EE1)-1)),'
FROM tb_maintain_log_statistics_month tb
INNER JOIN sys_manufactor sm on sm.id = tb.manufactor_id
WHERE tb.project_id =\'\'
GROUP BY tb.manufactor_id,tb.project_id');ELSESET@QQ=CONCAT('SELECT tb.project_name,
sm.id manufactor_id,
sm.name manufactor_name,',CONCAT(@EE,LEFT(@EE1,LENGTH(@EE1)-1)),'
FROM tb_maintain_log_statistics_month tb
INNER JOIN sys_manufactor sm on sm.id = tb.manufactor_id
WHERE tb.project_id in (',proId,')
GROUP BY tb.manufactor_id,tb.project_id');ENDif;ELSESET@QQ=CONCAT('SELECT tb.project_name,
sm.id manufactor_id,
sm.name manufactor_name,',CONCAT(@EE,LEFT(@EE1,LENGTH(@EE1)-1)),'
FROM tb_maintain_log_statistics_month tb
INNER JOIN sys_manufactor sm on sm.id = tb.manufactor_id
GROUP BY tb.manufactor_id,tb.project_id');ENDif;PREPARE stmt2 FROM@QQ;EXECUTE stmt2;END;