sql >> Databasteknik >  >> RDS >> Mysql

SQL GROUP_CONCAT uppdelad i olika kolumner

Du kan göra detta med substring_index() . Följande fråga använder din som en underfråga och tillämpar sedan denna 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

Uttrycket substring_index(currencies, ',' 2) tar listan i valutor upp till den andra. För amerikanska Somoa skulle det vara 'US Dollar,Kwanza' . Nästa samtal med -1 eftersom argumentet tar det sista elementet i listan, vilket skulle vara 'Kwanza' , som är det andra elementet i currencies .

Observera också att SQL-frågor returnerar en väldefinierad uppsättning kolumner. En fråga kan inte ha ett variabelt antal kolumner (såvida du inte använder dynamisk SQL genom en prepare uttalande).



  1. Oracle 11g - Hitta poster i en CLOB med Carriage Return Line Feed

  2. Förbättra frågehastighet:enkelt SELECT i stora postgres-tabellen

  3. Öka minnesgränsen

  4. Rekursiv subquerying med sortering