sql >> Database >  >> RDS >> Mysql

SQL GROUP_CONCAT opgesplitst in verschillende kolommen

U kunt dit doen met substring_index() . De volgende query gebruikt de uwe als een subquery en past vervolgens deze logica toe:

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

De uitdrukking substring_index(currencies, ',' 2) brengt de lijst in valuta naar de tweede. Voor Amerikaans Somoa is dat 'US Dollar,Kwanza' . De volgende oproep met -1 aangezien het argument het laatste element van de lijst neemt, wat 'Kwanza' . zou zijn , het tweede element van currencies .

Houd er ook rekening mee dat SQL-query's een goed gedefinieerde set kolommen retourneren. Een query kan geen variabel aantal kolommen hebben (tenzij u dynamische SQL gebruikt via een prepare verklaring).



  1. pymysql callproc() lijkt volgende selecties te beïnvloeden

  2. Implementatie van SQL Server-prestatie-indicator voor query's, opgeslagen procedures en triggers

  3. Oracle SQL:tijdstempels in waar-clausule

  4. Ef core 5 veel naar veel filter