Можете да направите това с substring_index()
. Следната заявка използва вашата като подзаявка и след това прилага тази логика:
select Name, ISOCode_2,
substring_index(currencies, ',', 1) as Currency1,
(case when numc >= 2 then substring_index(substring_index(currencies, ',', 2), ',', -1) end) as Currency2,
(case when numc >= 3 then substring_index(substring_index(currencies, ',', 3), ',', -1) end) as Currency3,
(case when numc >= 4 then substring_index(substring_index(currencies, ',', 4), ',', -1) end) as Currency4,
(case when numc >= 5 then substring_index(substring_index(currencies, ',', 5), ',', -1) end) as Currency5,
(case when numc >= 6 then substring_index(substring_index(currencies, ',', 6), ',', -1) end) as Currency6,
(case when numc >= 7 then substring_index(substring_index(currencies, ',', 7), ',', -1) end) as Currency7,
(case when numc >= 8 then substring_index(substring_index(currencies, ',', 8), ',', -1) end) as Currency8
from (SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currencies,
count(*) as numc
FROM country
INNER JOIN countryCurrency ON country.country_id = countryCurrency.country_id
INNER JOIN currency ON currency.currency_id = countryCurrency.currency_id
GROUP BY country.name
) t
Изразът substring_index(currencies, ',' 2)
взема списъка във валути до втората. За Американска Сомоа това би било 'US Dollar,Kwanza'
. Следващото обаждане с -1
тъй като аргументът взема последния елемент от списъка, който би бил 'Kwanza'
, което е вторият елемент от currencies
.
Също така имайте предвид, че SQL заявките връщат добре дефиниран набор от колони. Една заявка не може да има променлив брой колони (освен ако не използвате динамичен SQL чрез prepare
изявление).