Ik weet niet zeker of ik het gebruik van deze oplossing zou aanbevelen ... normalisatie van uw gegevens is altijd een betere keuze, maar ik wilde antwoorden met gewone SQL met enkele tekenreeksfuncties. Deze zoekopdracht zou moeten opleveren wat u zoekt:
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
Ik voeg alle waarden samen in een door komma's gescheiden tekenreeks, met twee komma's aan het einde van de tekenreeks (één komma zou hoe dan ook voldoende zijn, maar het is gemakkelijker om er twee te plaatsen en de laatste gewoon te negeren ...), en aangezien ik' m met CONCAT_WS zal het automatisch null-waarden overslaan, en de resulterende string zal zoiets zijn als Aug-12,Jun-12,Apr-12,,
.
Vervolgens extraheer ik in de buitenste query het n-de element van de string, met behulp van SUBSTRIG_INDEX. Ik zou aanraden om je database te normaliseren, maar als je een snelle oplossing nodig hebt, kan deze oplossing een goed startpunt zijn.
Zie het hier werken .
Houd er rekening mee dat ik geen NULL-waarden retourneert waar er geen wijzigingen zijn, maar in plaats daarvan lege tekenreeksen retourneert. Dit kan indien nodig worden gewijzigd.