Anda dapat melakukannya dengan substring_index()
. Kueri berikut menggunakan milik Anda sebagai subkueri dan kemudian menerapkan logika ini:
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
Ekspresi substring_index(currencies, ',' 2)
mengambil daftar dalam mata uang hingga yang kedua. Untuk Somoa Amerika, itu adalah 'US Dollar,Kwanza'
. Panggilan berikutnya dengan -1
sebagai argumen mengambil elemen terakhir dari daftar, yang akan menjadi 'Kwanza'
, yang merupakan elemen kedua dari currencies
.
Perhatikan juga bahwa kueri SQL mengembalikan kumpulan kolom yang terdefinisi dengan baik. Kueri tidak boleh memiliki jumlah kolom variabel (kecuali jika Anda menggunakan SQL dinamis melalui prepare
pernyataan).