आपको टेबल को पिवट करने की जरूरत है लेकिन mysql में पिवट की ऐसी कोई कार्यक्षमता नहीं है
इसलिए हमें इसकी कार्यक्षमता को दोहराने की आवश्यकता है
संपादित
Select
group_concat(
DISTINCT
if(year is null,
CONCAT('max(if (year is null, state, 0)) as ''NULL'' '),
CONCAT('max(if (year=''', year, ''', state, 0)) as ''',year, ''' '))
) into @sql from tbl join (SELECT @sql:='')a;
set @sql = concat('select company_name, ', @sql, 'from tbl group by company_name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
परिणाम
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
आपकी समस्या को हल करने के लिए 2 दृष्टिकोण हैं 1. प्रत्येक वर्ष के लिए मामला बनाएं, जो आपके मामले में संभव नहीं है क्योंकि हम वर्ष 2 के साथ काम कर रहे हैं। क्वेरी को गतिशील रूप से उत्पन्न करें ताकि हमें आपकी आवश्यकता के अनुसार उचित कॉलम मिलें।
मैंने दूसरे समाधान के अनुसार समाधान दिया है जहां मैं क्वेरी उत्पन्न कर रहा हूं और इसे @sql
. में संग्रहीत कर रहा हूं चर। फिडेल में मैंने @sql
. की सामग्री को प्रिंट किया है इसे क्रियान्वित करने से पहले।
select company_name, max(if (year='2008', state, 0)) as '2008' ,max(if (year='2009', state, 0)) as '2009' ,max(if (year='2010', state, 0)) as '2010' ,max(if (year is null, state, 0)) as 'NULL' from tbl group by company_name;
group_concat()
के बारे में अधिक जानकारी के लिए लिंक देखेंGROUP_CONCAT
औरउपयोगकर्ता परिभाषित चर
आशा है कि यह मदद करता है..