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

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

कभी-कभी, आपका डेटा पंक्तियों में संग्रहीत हो सकता है और आप इसे कॉलम के रूप में रिपोर्ट करना चाह सकते हैं। ऐसे मामलों में, आपको पंक्तियों को स्तंभों में स्थानांतरित करने की आवश्यकता होगी। कभी-कभी, ये पंक्तियाँ भी परिवर्तनशील हो सकती हैं। तो आप जान सकते हैं कि आपको कितने कॉलम चाहिए। ऐसे मामलों में, आपको पंक्तियों को गतिशील रूप से स्तंभों में स्थानांतरित करने की आवश्यकता होती है। चूंकि MySQL में ऐसा करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, इसलिए आपको SQL क्वेरी का उपयोग करके इसे पूरा करने की आवश्यकता है। MySQL में पंक्तियों को कॉलम में गतिशील रूप से स्थानांतरित करने के लिए यहां एक SQL क्वेरी है।

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

यहाँ MySQL में डायनेमिक पिवट टेबल बनाने का तरीका बताया गया है। मान लें कि आपके पास निम्न तालिका है

CREATE TABLE Meeting
(
    ID INT,
    Meeting_id INT,
    field_key VARCHAR(100),
    field_value VARCHAR(100)
);

INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (1, 1,'first_name' , 'Alec');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (2, 1,'last_name' , 'Jones');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (3, 1,'occupation' , 'engineer');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (4,2,'first_name' , 'John');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (5,2,'last_name' , 'Doe');
INSERT INTO Meeting(ID,Meeting_id,field_key,field_value)
VALUES (6,2,'occupation' , 'engineer');

+------+------------+------------+-------------+
| ID   | Meeting_id | field_key  | field_value |
+------+------------+------------+-------------+
|    1 |          1 | first_name | Alec        |
|    2 |          1 | last_name  | Jones       |
|    3 |          1 | occupation | engineer    |
|    4 |          2 | first_name | John        |
|    5 |          2 | last_name  | Doe         |
|    6 |          2 | occupation | engineer    |
+------+------------+------------+-------------+

मान लें कि आप पंक्तियों को गतिशील रूप से स्तंभों में स्थानांतरित करना चाहते हैं, जैसे कि field_key में प्रत्येक अद्वितीय मान के लिए एक नया स्तंभ बनाया जाता है कॉलम, यानी (first_name, last_name, पेशा)

+------------+-------------+-------------+-------------+
| Meeting_id | first_name  |  last_name  |  occupation |
+------------+-------------+-------------+-------------+
|          1 |       Alec  | Jones       | engineer    |
|          2 |       John  | Doe         | engineer    |
+------------+-------------+-------------+-------------+

पंक्तियों को गतिशील रूप से स्तंभों में स्थानांतरित करें

यदि आप पहले से ही जानते हैं कि आप कौन से कॉलम पहले से बना रहे हैं, तो आप पिवट टेबल बनाने के लिए बस एक केस स्टेटमेंट का उपयोग कर सकते हैं।

चूंकि हम नहीं जानते कि कौन से कॉलम बनाए जाने हैं, हमें GROUP_CONCAT फ़ंक्शन का उपयोग करके पंक्तियों को गतिशील रूप से कॉलम में स्थानांतरित करना होगा, जैसा कि नीचे दिखाया गया है

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting;
SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting 
                   GROUP BY Meeting_id');

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

GROUP_CONCAT आपको कई पंक्तियों से फ़ील्ड_की मानों को एक स्ट्रिंग में संयोजित करने की अनुमति देता है। उपरोक्त क्वेरी में, हम field_key में अद्वितीय मानों के आधार पर गतिशील रूप से CASE स्टेटमेंट बनाने के लिए GROUP_CONCAT का उपयोग करते हैं। कॉलम और उस स्ट्रिंग को @sql वेरिएबल में स्टोर करें, जो तब हमारी चुनिंदा क्वेरी बनाने के लिए उपयोग किया जाता है।

+------------+------------+-----------+------------+
| Meeting_id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
|          1 | Alec       | Jones     | engineer   |
|          2 | John       | Doe       | engineer   |
+------------+------------+-----------+------------+

इस प्रकार आप MySQL में पिवट तालिका प्रश्नों को स्वचालित कर सकते हैं और पंक्तियों को गतिशील रूप से स्तंभों में स्थानांतरित कर सकते हैं।

आप WHERE क्लॉज या जॉइन जोड़कर उपरोक्त क्वेरी को अपनी आवश्यकताओं के अनुसार कस्टमाइज़ कर सकते हैं।

यदि आप केवल चुनिंदा पंक्ति मानों को कॉलम के रूप में स्थानांतरित करना चाहते हैं, तो आप अपने पहले चयन GROUP_CONCAT स्टेटमेंट में WHERE क्लॉज जोड़ सकते हैं।

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      field_key,
      ''' then field_value end) ',
      field_key
    )
  ) INTO @sql
FROM
  Meeting
WHERE <condition>;

यदि आप अपनी अंतिम पिवट तालिका में पंक्तियों को फ़िल्टर करना चाहते हैं, तो आप अपने SET स्टेटमेंट में WHERE क्लॉज जोड़ सकते हैं।

SET @sql = CONCAT('SELECT Meeting_id, ', @sql, ' 
                  FROM Meeting WHERE <condition>
                   GROUP BY Meeting_id');

इसी तरह, जब आप MySQL में पंक्तियों को गतिशील रूप से कॉलम में स्थानांतरित करते हैं, तो आप अपनी SQL क्वेरी में JOINS भी लागू कर सकते हैं।

यहां Ubiq का उपयोग करके बनाई गई पिवट तालिका का एक उदाहरण दिया गया है।

यदि आप MySQL डेटाबेस से पिवट टेबल, चार्ट, डैशबोर्ड और रिपोर्ट बनाना चाहते हैं, तो आप Ubiq को आजमा सकते हैं। हम 14-दिन का निःशुल्क परीक्षण प्रदान करते हैं।

  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. सबक्वेरी बनाम जॉइन

  4. MySQL बनाम PHP में गणना करना

  5. पेजिंग सॉर्टिंग जोड़ें और jQuery डेटाटेबल का उपयोग करके खोजें