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

行としてのMySQLピボットテーブルの列データ

    SELECT  a.ID,
            a.user_ID,
            a.job_id,
            MAX(CASE WHEN c.question = 'Is it this?' THEN b.answer END) 'Is it this?',
            MAX(CASE WHEN c.question = 'Or this?' THEN b.answer END) 'Or this?',
            MAX(CASE WHEN c.question = 'Or that? ' THEN b.answer END) 'Or that? '
    FROM    Results a
            INNER JOIN Answers b
                ON a.id = b.fk_result_id
            INNER JOIN Question c
                ON b.fk_question_id = c.ID
    GROUP   BY a.ID,
            a.user_ID,
            a.job_id
    

    質問の数がわからない場合(特にMateiMihaiが言ったように1000 )、動的バージョンが大いに必要です。

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(CASE WHEN c.question = ''',
          question,
          ''' then b.answer end) AS ',
          CONCAT('`',question,'`')
        )
      ) INTO @sql
    FROM Question;
    
    SET @sql = CONCAT('SELECT  a.ID,
                                a.user_ID,
                                a.job_id, ', @sql, ' 
                        FROM    Results a
                                INNER JOIN Answers b
                                    ON a.id = b.fk_result_id
                                INNER JOIN Question c
                                    ON b.fk_question_id = c.ID
                        GROUP   BY a.ID,
                                a.user_ID,
                                a.job_id');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    出力

    ╔════╦═════════╦════════╦═════════════╦══════════╦══════════╗
    ║ ID ║ USER_ID ║ JOB_ID ║ IS IT THIS? ║ OR THIS? ║ OR THAT? ║
    ╠════╬═════════╬════════╬═════════════╬══════════╬══════════╣
    ║  1 ║       1 ║      1 ║ Yes         ║ No       ║ Maybe    ║
    ║  2 ║       1 ║      3 ║ Maybe       ║ No       ║ Maybe    ║
    ║  3 ║       2 ║      3 ║ Yes         ║ Yes      ║ No       ║
    ╚════╩═════════╩════════╩═════════════╩══════════╩══════════╝
    



    1. make_date()がPostgreSQLでどのように機能するか

    2. PHP PDO:文字セット、セット名?

    3. phpとmysqlを使用してタグ付けシステムを作成するにはどうすればよいですか?

    4. PDO-MySQL:プリペアドステートメントのバインド時にブール値が1または空の文字列に変換されます