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

MySQL में क्रॉसस्टैब देखें?

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

अगर clients . के नाम समय से पहले जाना जाता है, तो आप क्वेरी को हार्ड-कोड कर सकते हैं:

select s.playdate,
  sum(case when clname = 'Chris' then score end) Chris,
  sum(case when clname = 'Gale' then score end) Gale,
  sum(case when clname = 'Donna' then score end) Donna
from clients c
inner join scores s
  on c.clid = s.clid
group by s.playdate;

देखें SQL Fiddle with Demo

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

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN clName = ''',
      clName,
      ''' THEN score else ''-'' END) AS `',
      clName, '`'
    )
  ) INTO @sql
FROM clients;

SET @sql 
  = CONCAT('SELECT s.playdate, ', @sql, ' 
            from clients c
            inner join scores s
              on c.clid = s.clid
            group by s.playdate');

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. MySQL में कॉलम के रूप में रो वैल्यू कैसे प्रदर्शित करें

  2. क्या उपयोगकर्ता 'उपयोगकर्ता'@'%' और 'उपयोगकर्ता'@'लोकलहोस्ट' समान नहीं हैं?

  3. MySQL - FOUND_ROWS () प्रभावित पंक्तियों की कुल संख्या के लिए कार्य

  4. MySQL - कॉलम रिक्त होने पर किसी अन्य तालिका से मान पुनर्प्राप्त करें

  5. एक पंक्ति अपडेट करें, लेकिन अगर कोडनिर्देशक में पंक्ति मौजूद नहीं है तो डालें