sql >> Databáze >  >> RDS >> Mysql

SQL GROUP_CONCAT rozdělena do různých sloupců

Můžete to udělat pomocí substring_index() . Následující dotaz používá váš jako poddotaz a poté použije tuto logiku:

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

Výraz substring_index(currencies, ',' 2) přebírá seznam v měnách až na druhou. Pro americkou Somoa by to bylo 'US Dollar,Kwanza' . Další volání s -1 protože argument přebírá poslední prvek seznamu, což by bylo 'Kwanza' , což je druhý prvek currencies .

Všimněte si také, že dotazy SQL vracejí dobře definovanou sadu sloupců. Dotaz nemůže mít proměnný počet sloupců (pokud nepoužíváte dynamické SQL prostřednictvím prepare prohlášení).



  1. Jak mohu získat výsledky z entity JPA seřazené podle vzdálenosti?

  2. Klient Oracle ORA-12541:TNS:žádný posluchač

  3. Co jsou zdroje#?

  4. ORACLE:ŽÁDNÁ DATA NALEZENA -- ale data existují