sql >> データベース >  >> RDS >> Mysql

SQLGROUP_CONCATが異なる列に分割されました

    これは、substring_index()を使用して行うことができます 。次のクエリは、サブクエリとしてyourを使用し、このロジックを適用します。

    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
    

    substring_index(currencies, ',' 2) 2番目までの通貨でリストを取得します。 American Somoaの場合、これは'US Dollar,Kwanza'になります。 。 -1を使用した次の呼び出し 引数はリストの最後の要素を取ります。これは'Kwanza'になります。 、これはcurrenciesの2番目の要素です 。

    また、SQLクエリは明確に定義された列のセットを返すことに注意してください。クエリに可変数の列を含めることはできません(prepareを介して動的SQLを使用している場合を除く) ステートメント)。



    1. テーブルから他のテーブルにすべての行を挿入する、単一のクエリ

    2. MySQL LIKE句でユーザー変数を使用するにはどうすればよいですか?

    3. SQL Serverで重複する行を削除するにはどうすればよいですか?

    4. SQLに対して複数のクエリを実行する方法