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

MySQL - एक कॉलम में से एक रिकॉर्ड बनाएं

आप जो मांग रहे हैं वह मूल रूप से एक PIVOT है लेकिन MySQL में पिवट फ़ंक्शन नहीं है, इसलिए आप इसे CASE . का उपयोग करके दोहरा सकते हैं एक समग्र कार्य के साथ बयान।

यदि आप मूल्यों को जानते हैं, तो आप इसके समान समाधान को हार्ड-कोड कर सकते हैं:

select id,
  max(case when component_id = 1 then data end) Email,
  max(case when component_id = 2 then data end) Firstname,
  max(case when component_id = 3 then data end) Lastname,
  max(case when component_id = 4 then data end) Phone
from yourtable
group by id;

देखें SQL Fiddle with Demo

नतीजा यह है:

| ID |            EMAIL |  FIRSTNAME |  LASTNAME |  PHONE |
-----------------------------------------------------------
|  1 | [email protected] | firstname1 | lastname1 | phone1 |
|  2 |           email2 | firstname2 | lastname2 | phone2 |

मैं अनुमान लगा रहा हूं कि आपके पास कंपोनेंट_आईडी को एक नाम से जोड़ने के लिए एक टेबल है, ताकि आपकी क्वेरी भी हो सके:

select t1.id,
  max(case when t2.name = 'email' then data end) Email,
  max(case when t2.name= 'FirstName' then data end) Firstname,
  max(case when t2.name= 'LastName' then data end) Lastname,
  max(case when t2.name= 'phone' then data end) Phone
from yourtable t1
inner join component t2
  on t1.component_id = t2.id 
group by t1.id;

देखें SQL Fiddle with Demo

यदि आपके पास अज्ञात संख्या में मान हैं, तो आप इस क्वेरी को गतिशील रूप से उत्पन्न करने के लिए तैयार कथन का उपयोग कर सकते हैं:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when name = ''',
      name,
      ''' then data end) AS ',
      name
    )
  ) INTO @sql
FROM component;

SET @sql = CONCAT('SELECT t1.id, ', @sql, ' 
                  from yourtable t1
                  inner join component t2
                    on t1.component_id = t2.id 
                  group by t1.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

देखें SQL Fiddle with Demo

सभी संस्करण आपको समान परिणाम देंगे।




  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 LIKE क्वेरी में PHP स्ट्रिंग का उपयोग कैसे करें?

  3. PHP में डेटाबेस में डेटा को स्वचालित रूप से कैसे अपडेट करें

  4. Mysql कॉलम के मिलान से बहु-आयामी सरणी

  5. कोडनिर्देशक में नेस्टेड जुड़ता है