sql >> Database teknologi >  >> RDS >> Mysql

SQL GROUP_CONCAT opdelt i forskellige kolonner

Du kan gøre dette med substring_index() . Følgende forespørgsel bruger din som en underforespørgsel og anvender derefter denne logik:

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

Udtrykket substring_index(currencies, ',' 2) fører listen i valutaer op til den anden. For amerikanske Somoa ville det være 'US Dollar,Kwanza' . Det næste opkald med -1 da argumentet tager det sidste element af listen, som ville være 'Kwanza' , som er det andet element i currencies .

Bemærk også, at SQL-forespørgsler returnerer et veldefineret sæt kolonner. En forespørgsel kan ikke have et variabelt antal kolonner (medmindre du bruger dynamisk SQL gennem en prepare erklæring).



  1. Sådan opretter du SQL-spor for at fange SQL Server-hændelser

  2. Python postgreSQL sqlalchemy forespørger en DATERANGE kolonne

  3. Den Laravel-angivne nøgle var for lang ved oprettelse af notifikationstabel

  4. Slutter med at lukke en åben SQL-forbindelse