Не съм сигурен дали бих препоръчал използването на това решение... нормализирането на вашите данни винаги е по-добър избор, но исках да отговоря с помощта на обикновен 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,,
.
След това във външната заявка извличам n-тия елемент от низа, използвайки SUBSTRIG_INDEX. Бих препоръчал да нормализирате вашата база данни, но ако имате нужда от бързо решение, това решение може да е добра отправна точка.
Вижте как работи тук .
Моля, обърнете внимание, че не връщам NULL стойности, когато няма промени, а вместо това връщам празни низове. Това може да се промени, ако е необходимо.