इस बारे में सोचने के लिए 3 चीजें हैं 1) अधिकतम का एक गुच्छा गतिशील रूप से कैसे उत्पन्न करें (केस जब 2) मामले को समूहबद्ध करने के लिए कुछ असाइन करना - इस मामले में मैं एक चर का उपयोग करके एक पंक्ति संख्या उत्पन्न करता हूं 3) आपके कुछ नौकरी शीर्षक शामिल हैं व्हाइट स्पेस जिसे मैं कॉलम हेडर बनाने के लिए हटाता हूं
set @sql =
(select concat('select ', gc, ' from
(select name,job_title,
if (job_title <> @p, @rn:=1 ,@rn:[email protected]+1) rn,
@p:=job_title p
from t
cross join (select @rn:=0,@p:=null) r
order by job_title
) s group by rn;') from
(select
group_concat('max(case when job_title = ', char(39),job_title ,char(39),' then name else char(32) end ) as ',replace(job_title,char(32),'')) gc
from
(
select distinct job_title from t
) s
) t
)
;
यह sql कोड जनरेट करता है
select max(case when job_title = 'Fireman' then name else char(32) end ) as Fireman,
max(case when job_title = 'Driver' then name else char(32) end ) as Driver,
max(case when job_title = 'Analyst' then name else char(32) end ) as Analyst,
max(case when job_title = 'Postman' then name else char(32) end ) as Postman,
max(case when job_title = 'Research Manager' then name else char(32) end ) as ResearchManager
from
(select name,job_title,
if (job_title <> @p, @rn:=1 ,@rn:[email protected]+1) rn,
@p:=job_title p
from t
cross join (select @rn:=0,@p:=null) r
order by job_title
) s group by rn;
जिसे डायनेमिक sql में सबमिट किया जा सकता है
prepare sqlstmt from @sql;
execute sqlstmt;
deallocate prepare sqlstmt;
परिणाम
+---------+--------+---------+---------+-----------------+
| Fireman | Driver | Analyst | Postman | ResearchManager |
+---------+--------+---------+---------+-----------------+
| Sam | Tomas | Lisa | Marcus | Mary |
| Peter | Chen | Stephan | | |
| | | Albert | | |
+---------+--------+---------+---------+-----------------+
3 rows in set (0.00 sec)