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

पंक्तियों को कॉलम में गतिशील रूप से परिवर्तित करने के लिए MySQL क्वेरी

आप GROUP BY का उपयोग कर सकते हैं और MAX धुरी का अनुकरण करने के लिए। MySQL IF . को भी सपोर्ट करता है बयान।

SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID

यदि आपके पास order . के एक से अधिक मान हैं , डायनेमिक SQL अधिक उपयुक्त हो सकता है ताकि आपको क्वेरी को संशोधित न करना पड़े:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

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

दोनों प्रश्नों का आउटपुट:

╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║  1 ║ P     ║ S     ║
║  2 ║ R     ║ Q     ║
╚════╩═══════╩═══════╝


  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. MySQL में केस सेंसिटिव कॉलेशन

  3. रूबी ऑन रेल्स 3 OSX पर सॉकेट '/tmp/mysql.sock' के माध्यम से स्थानीय MySQL सर्वर से कनेक्ट नहीं हो सकता

  4. शुरुआती और इंटरमीडिएट के लिए 10 MySQL डेटाबेस साक्षात्कार प्रश्न

  5. एक IN स्थिति sql में =से धीमी क्यों होगी?