sql >> Database teknologi >  >> RDS >> Mysql

MySQL-pivottabelkolonnedata som rækker

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
 

Hvis du har ukendt antal spørgsmål (specifikt 1000 som Matei Mihai sagde ), er en dynamisk version meget påkrævet.

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;
 

OUTPUT

╔════╦═════════╦════════╦═════════════╦══════════╦══════════╗ ║ 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. Eksempler på JDBC-erklæringer – Indsæt, Slet, Opdater, Vælg Record

  2. Databaseautomatisering bag Sveriges nye elektroniske identitet Freja eID

  3. Eksporter SQL-forespørgselsdata til Excel

  4. Slet forespørgsel og opdater i ListView i Android (sqlite)