कभी-कभी, आपको रिपोर्टिंग उद्देश्यों के लिए पंक्तियों को कॉलम में बदलने या पिवट टेबल बनाने की आवश्यकता हो सकती है। चूंकि 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 | +------------+-------------+-------------+-------------+
MySQL में कॉलम के रूप में पंक्ति मान प्रदर्शित करें
यदि आप पहले से ही जानते हैं कि आप कौन से कॉलम बनाना चाहते हैं, तो आप केस स्टेटमेंट का उपयोग करके एक पिवट टेबल बना सकते हैं, जैसा कि नीचे दिखाया गया है, पंक्ति मानों को MySQL में कॉलम के रूप में प्रदर्शित करने के लिए।
mysql> select meeting_Id,
max(case when (field_key='first_name') then field_value else NULL end) as 'first_name',
max(case when (field_key='last_name') then field_value else NULL end) as 'last_name',
max(case when (field_key='occupation') then field_value else NULL end) as 'occupation'
from meeting
group by meeting_Id
order by meeting_Id;
+------------+------------+-----------+------------+
| meeting_Id | first_name | last_name | occupation |
+------------+------------+-----------+------------+
| 1 | Alec | Jones | engineer |
| 2 | John | Doe | engineer |
+------------+------------+-----------+------------+
MySQL में डायनामिक रूप से कॉलम के रूप में पंक्ति मान प्रदर्शित करें
यदि आप पहले से कॉलम नामों को नहीं जानते हैं, या MySQL में पंक्ति मानों को गतिशील रूप से कॉलम के रूप में प्रदर्शित करना चाहते हैं, तो आप GROUP_CONCAT फ़ंक्शन का उपयोग करके MySQL में डायनेमिक पिवट टेबल बना सकते हैं, जैसा कि नीचे दिखाया गया है।
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 | +------------+------------+-----------+------------+
आप 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 भी लागू कर सकते हैं।
MySQL में रो को कॉलम में बदलने के बाद, आप एक चार्टिंग टूल का उपयोग करके एक टेबल में परिणाम प्लॉट कर सकते हैं। यहां Ubiq का उपयोग करके बनाई गई पिवट तालिका का एक उदाहरण दिया गया है।
यदि आप MySQL डेटाबेस से पिवट टेबल, चार्ट और डैशबोर्ड बनाना चाहते हैं, तो आप Ubiq को आजमा सकते हैं। हम 14-दिन का निःशुल्क परीक्षण प्रदान करते हैं।