मुझे यकीन नहीं है कि मैं इस समाधान का उपयोग करने की सिफारिश करूंगा ... आपके डेटा का सामान्यीकरण हमेशा एक बेहतर विकल्प होता है, लेकिन मैं कुछ स्ट्रिंग फ़ंक्शंस के साथ सादे SQL का उपयोग करके उत्तर देना चाहता था। आप जो खोज रहे हैं वह इस क्वेरी को वापस करना चाहिए:
SELECT
Name,
Changes,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 1)), ',', 1)) as Change1,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 2)), ',', 1)) as Change2,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 3)), ',', 1)) as Change3,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 4)), ',', 1)) as Change4,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 5)), ',', 1)) as Change5,
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(Changes, ',', 6)), ',', 1)) as Change6
FROM (
SELECT
Name,
CONCAT_WS(',', CURRENT, OCT12, SEPT12, AUG12, JUL12, JUN12, MAY12, APR12, ',') as Changes
FROM
TableA
) s
मैं सभी मानों को अल्पविराम से अलग स्ट्रिंग में जोड़ रहा हूं, स्ट्रिंग के अंत में दो अल्पविरामों के साथ (एक अल्पविराम वैसे भी पर्याप्त होगा, लेकिन दो डालना आसान है और केवल अंतिम को अनदेखा करें ...), और चूंकि मैं ' m CONCAT_WS का उपयोग करके यह स्वचालित रूप से शून्य मानों को छोड़ देगा, और परिणामी स्ट्रिंग कुछ इस तरह होगी Aug-12,Jun-12,Apr-12,,
।
फिर बाहरी क्वेरी में मैं SUBSTRIG_INDEX का उपयोग करके स्ट्रिंग के n-वें तत्व को निकाल रहा हूं। मैं आपके डेटाबेस को सामान्य करने की अनुशंसा करता हूं, लेकिन यदि आपको त्वरित सुधार की आवश्यकता है तो यह समाधान एक अच्छा प्रारंभिक बिंदु हो सकता है।
इसे यहां काम करते हुए देखें ।
कृपया ध्यान दें कि मैं NULL मान नहीं लौटा रहा हूँ जहाँ कोई परिवर्तन नहीं है, लेकिन मैं इसके बजाय खाली तार लौटा रहा हूँ। जरूरत पड़ने पर इसे बदला जा सकता है।