首先需求是这样的,而且标题这一行是可以做增删改操作的,所以是动态的。
假设标题列是固定的,sql如下
SELECT d.`onduty_time`,
(CASE t.`onduty_name` WHEN '区值班领导' THEN p.`name` ELSE NULL END) '区值班领导',
(CASE t.`onduty_name` WHEN '局值班领导' THEN p.`name` ELSE NULL END) '局值班领导',
(CASE t.`onduty_name` WHEN '值班科长' THEN p.`name` ELSE NULL END) '值班科长',
(CASE t.`onduty_name` WHEN '值班主任' THEN p.`name` ELSE NULL END) '值班主任'
FROM onduty_access_type t INNER JOIN
onduty_type_person_r r ON r.`type_id` = t.`id`
INNER JOIN onduty_person p ON p.id = r.`person_id`
INNER JOIN onduty_arrange_duty d ON d.tp_rid = r.id
关键部分就是(CASE t.`onduty_name` WHEN '区值班领导' THEN p.`name` ELSE NULL END) '区值班领导'
但是要写活,sql如下
-- 1、申明@sql,相当于定义了一个变量
SET @sql=NULL;
-- 2、拼接,这就把之前的标题行写活并且拼接起来了
SELECT GROUP_CONCAT(DISTINCT CONCAT_WS('"','(CASE t.`onduty_name` WHEN ',t.`onduty_name`,
' THEN p.&#