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

MySQL-列から1つのレコードを作成します

    あなたが求めているのは基本的にPIVOT ただし、MySQLにはピボット機能がないため、CASEを使用してこれを複製できます。 集計関数を使用したステートメント。

    値がわかっている場合は、次のようなソリューションをハードコーディングできます。

    select id,
      max(case when component_id = 1 then data end) Email,
      max(case when component_id = 2 then data end) Firstname,
      max(case when component_id = 3 then data end) Lastname,
      max(case when component_id = 4 then data end) Phone
    from yourtable
    group by id;
    

    SQL Fiddle withDemo を参照してください。

    結果は次のとおりです。

    | ID |            EMAIL |  FIRSTNAME |  LASTNAME |  PHONE |
    -----------------------------------------------------------
    |  1 | [email protected] | firstname1 | lastname1 | phone1 |
    |  2 |           email2 | firstname2 | lastname2 | phone2 |
    

    component_idを名前に関連付けるテーブルがあるので、クエリも次のようになります。

    select t1.id,
      max(case when t2.name = 'email' then data end) Email,
      max(case when t2.name= 'FirstName' then data end) Firstname,
      max(case when t2.name= 'LastName' then data end) Lastname,
      max(case when t2.name= 'phone' then data end) Phone
    from yourtable t1
    inner join component t2
      on t1.component_id = t2.id 
    group by t1.id;
    

    SQL Fiddle withDemo を参照してください。

    値の数が不明な場合は、プリペアドステートメントを使用して、このクエリを動的に生成できます。

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(case when name = ''',
          name,
          ''' then data end) AS ',
          name
        )
      ) INTO @sql
    FROM component;
    
    SET @sql = CONCAT('SELECT t1.id, ', @sql, ' 
                      from yourtable t1
                      inner join component t2
                        on t1.component_id = t2.id 
                      group by t1.id');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    SQL Fiddle withDemo を参照してください。

    すべてのバージョンで同じ結果が得られます。




    1. AndroidでPhoneGap/Cordovaを使用して事前入力されたSQLiteデータベースにアクセスできません

    2. 除算(/)がpostgresqlで私の答えを与えていない

    3. MariaDBデータベースのすべてのビューを一覧表示する4つの方法

    4. PostgreSQLの誤った並べ替え