Szukałem dużo, ale nie znalazłem właściwego rozwiązania mojego problemu.SQL GROUP_CONCAT podzielone na różne kolumny
Co chcę zrobić?
Mam 2 tabele w MySQL: - Kraj - waluta (łączę je ze sobą za pośrednictwem CountryCurrency -> ze względu na wiele do wielu relacji)
Zobacz to na przykładzie pracy: http://sqlfiddle.com/#!2/317d3/8/0
Chcę połączyć obie tabele przy użyciu łączenia, ale chcę wyświetlić tylko jeden wiersz dla każdego kraju (niektóre kraje mają wiele walut, więc był to pierwszy problem).
Znalazłem funkcję GROUP_CONCAT:
SELECT country.Name, country.ISOCode_2, group_concat(currency.name) AS currency
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
ten ma następujący wynik:
NAME ISOCODE_2 CURRENCY
Afghanistan AF Afghani
Åland Islands AX Euro
Albania AL Lek
Algeria DZ Algerian Dinar
American Samoa AS US Dollar,Kwanza,East Caribbean Dollar
Ale to, co chcę teraz podzielić walutach, w różnych kolumn (waluta 1 walutami 2, ...). Próbowałem już funkcji takich jak MAKE_SET(), ale to nie działa.
SQL nie obsługuje dynamicznej liczby kolumn. Będziesz musiał to zrobić w aplikacji. – Vatev
Możesz użyć logiki w Kursorze, aby to zrobić. Ale kursor najpierw musiałby sprawdzić, ile kolumn danych wymaga zestaw wyników. Dynamicznie utwórz tabelę tymczasową, która zostanie wypełniona, a następnie wybrana. Numerem dynaminc jest problem z tym wyzwaniem. –