एक ही कॉलम (Name) की अलग-अलग शर्तों (Subject) के मानों को जोड़ने के लिए CASE के साथ सशर्त एग्रीगेशन और CONCAT या GROUP_CONCAT का उपयोग करें।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1869 (
Id INT, Subject VARCHAR(20), Name VARCHAR(20)
);
डेटा डालें
mysql> INSERT INTO DemoTable1869 VALUES(100, 'MySQL', 'John'), (100, 'MongoDB', 'Smith'), (101, 'MySQL', 'Chris'), (101, 'MongoDB', 'Brown');
प्रति Id MySQL और MongoDB नाम जोड़ें
mysql> SELECT Id,
CONCAT(
MAX(CASE WHEN Subject = 'MySQL' THEN Name END),
'',
MAX(CASE WHEN Subject = 'MongoDB' THEN Name END)
) AS FullName
FROM DemoTable1869
GROUP BY Id;
आउटपुट:
+------+-------------+ | Id | FullName | +------+-------------+ | 100 | JohnSmith | | 101 | ChrisBrown | +------+-------------+
व्याख्या
CASE WHEN Subject='MySQL' THEN Name END→ MySQL पंक्ति का नाम, अन्यथा NULL।MAX(...)→ NULL को अनदेखा करके एकमात्र गैर-NULL मान चुनता है।CONCAT(...)→ दोनों जोड़ता है।
GROUP_CONCAT विकल्प (क्रम महत्वपूर्ण होने पर)
SELECT Id,
GROUP_CONCAT(Name ORDER BY Subject SEPARATOR '') AS FullName
FROM DemoTable1869
GROUP BY Id;
यह Subject वर्णमाला क्रम (MongoDB, MySQL) से जोड़ता है। कस्टम क्रम के लिए:
GROUP_CONCAT(Name ORDER BY FIELD(Subject, 'MySQL', 'MongoDB') SEPARATOR '')
पिवट/क्रॉसटैब पैटर्न
यह तकनीक "पंक्तियों को कॉलम में बदलने" (पिवट) के लिए सामान्य है।