मैं अन्य उत्तरों से सहमत हूं, कि GROUP_CONCAT
अल्पविराम से अलग किए गए मानों को विभाजित करने के लिए PHP के साथ शायद सबसे अच्छा तरीका है, हालांकि अगर किसी अन्य कारण से आपको शुद्ध एसक्यूएल के माध्यम से सुझाए गए आउटपुट की आवश्यकता है तो मैं निम्नलिखित में से एक का सुझाव दूंगा।
SELECT t1.Name,
MIN(t1.Subject) AS Sub1,
MIN(t2.Subject) AS Sub2,
MIN(t3.Subject) AS Sub3,
MIN(t4.Subject) AS Sub4
FROM Students t1
LEFT JOIN Students T2
ON t1.Name = t2.Name
AND t2.Subject > t1.Subject
LEFT JOIN Students T3
ON t2.Name = t3.Name
AND t3.Subject > t2.Subject
LEFT JOIN Students T4
ON t3.Name = t4.Name
AND t4.Subject > t3.Subject
GROUP BY t1.Name;
2. एकत्रित करने के लिए ROW_NUMBER प्रकार फ़ंक्शन का उपयोग करना
SELECT Name,
MAX(IF(RowNum = 1,Subject, NULL)) AS Sub1,
MAX(IF(RowNum = 2,Subject, NULL)) AS Sub2,
MAX(IF(RowNum = 3,Subject, NULL)) AS Sub3,
MAX(IF(RowNum = 4,Subject, NULL)) AS Sub4
FROM ( SELECT Name,
Subject,
@r:= IF(@Name = Name, @r + 1, 1) AS RowNum,
@Name:= Name AS Name2
FROM Students,
(SELECT @Name:='') n,
(SELECT @r:= 0) r
ORDER BY Name, Sno
) t
GROUP BY Name