Bạn có thể thực hiện việc này với substring_index()
. Truy vấn sau sử dụng truy vấn của bạn làm truy vấn con và sau đó áp dụng logic này:
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
Biểu thức substring_index(currencies, ',' 2)
đưa danh sách bằng đơn vị tiền tệ lên danh sách thứ hai. Đối với American Somoa, đó sẽ là 'US Dollar,Kwanza'
. Cuộc gọi tiếp theo với -1
vì đối số lấy phần tử cuối cùng của danh sách, sẽ là 'Kwanza'
, là yếu tố thứ hai của currencies
.
Cũng lưu ý rằng các truy vấn SQL trả về một tập hợp các cột được xác định rõ ràng. Một truy vấn không thể có số lượng cột thay đổi (trừ khi bạn đang sử dụng SQL động thông qua prepare
tuyên bố).