"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo pivotar los datos de la tabla MySQL con respuestas de preguntas como columnas?

¿Cómo pivotar los datos de la tabla MySQL con respuestas de preguntas como columnas?

Publicado el 2025-03-23
Navegar:159

How to Pivot MySQL Table Data with Question Answers as Columns?

mysql Pivot Tabla Data de la columna como filas

Las tablas de pivot son una herramienta poderosa para transformar datos de un formato basado en columna en un formato basado en filas. En MySQL, esta transformación se puede lograr utilizando la expresión del caso junto con las funciones de agregación.

para convertir los datos dados en un formato de tabla de pivote, donde las respuestas de las preguntas se muestran como columnas, se puede usar la siguiente consulta:

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

En esta consulta, la expresión del caso se usa para verificar la columna de preguntas de la tabla de preguntas y devolver la respuesta correspondiente de la tabla de respuestas. La función de agregación Max se usa para encontrar el valor máximo para cada pregunta, que representa la respuesta proporcionada para esa pregunta.

dinámica girando

para casos en los que el número de preguntas es desconocido o grande, una declaración sql dinámica puede generarse utilizando el siguiente código:

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;

Este código genera una instrucción SQL dinámica que puede manejar cualquier cantidad de preguntas. Construye dinámicamente la cláusula de selección concatenando el valor máximo para cada pregunta como un nombre de columna.

El resultado de la consulta será una tabla dinámica con el formato deseado, donde cada respuesta de la pregunta se muestra como una columna separada.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3