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

MySQL का उपयोग करते हुए पिवट टेबल

पिवट . करने के लिए MySQL में डेटा, आपको एक समग्र फ़ंक्शन और एक CASE . दोनों का उपयोग करने की आवश्यकता होगी अभिव्यक्ति।

यदि आपके पास ज्ञात संख्या में कॉलम हैं, तो आप क्वेरी को हार्ड-कोड कर सकते हैं:

select p.postid,
  max(case when t.tagname = 'Incident' then p.value end) Incident,
  max(case when t.tagname = 'Location' then p.value end) Location,
  max(case when t.tagname = 'Weapon' then p.value end) Weapon
from triples p
left join tags t
  on p.tagid = t.id
group by p.postid;

देखें SQL Fiddle with Demo

लेकिन अगर आपके पास अज्ञात संख्या में कॉलम हैं, तो आपको डायनेमिक SQL बनाने के लिए तैयार स्टेटमेंट का उपयोग करना होगा:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(CASE WHEN TagName = ''',
      TagName,
      ''' THEN p.value END) AS `',
      TagName, '`'
    )
  ) INTO @sql
FROM tags;


SET @sql 
  = CONCAT('SELECT p.postid, ', @sql, ' 
           from triples p
           left join tags t
             on p.tagid = t.id
           group by p.postid');

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

देखें SQL Fiddle with Demo

दोनों परिणाम देंगे:

| POSTID | INCIDENT |      LOCATION | WEAPON |
----------------------------------------------
|      1 |   Murder | New Brunswick | (null) |
|      2 |    Theft |        (null) |    Gun |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL IN खंड में अल्पविराम से अलग किए गए मान

  2. MySQL ऑल्टर टेबल कॉलम

  3. स्पष्ट गतिरोध असाइन नहीं किए गए लंबित कार्यों के लिए आपातकालीन सूत्र बनाना

  4. कैसे जावास्क्रिप्ट का उपयोग कर एक mysql डेटाबेस से डेटा प्राप्त करने के लिए?

  5. मैं इस SQL ​​​​कथन को Django QuerySet में कैसे परिवर्तित कर सकता हूं?