Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में टेबल पिवट कैसे करें

इस बारे में सोचने के लिए 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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तिथियों के साथ एक अस्थायी तालिका बनाएं

  2. रेल mysql अनुकूलक त्रुटि

  3. पीडीओ के साथ कई पंक्तियाँ सम्मिलित करें

  4. केकपीएचपी क्वेरी डेटाबेस से निकटतम अक्षांश देशांतर

  5. कोई बात नहीं, मैं हाइबरनेट में MySQL INSERT स्टेटमेंट को बैच नहीं कर सकता