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.
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