Tengo un enigma interesante que creo que se puede resolver en puramente SQL. Tengo tablas similares a las siguientes:Filas de transposición SQL como columnas
responses:
user_id | question_id | body
----------------------------
1 | 1 | Yes
2 | 1 | Yes
1 | 2 | Yes
2 | 2 | No
1 | 3 | No
2 | 3 | No
questions:
id | body
-------------------------
1 | Do you like apples?
2 | Do you like oranges?
3 | Do you like carrots?
y me gustaría obtener la siguiente salida
user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1 | Yes | Yes | No
2 | Yes | No | No
No sé cuántas preguntas habrá, y ellos serán dinámico, por lo No puedo codificar todas las preguntas. Estoy usando PostgreSQL y creo que esto se llama transposición, pero parece que no puedo encontrar nada que diga la forma estándar de hacerlo en SQL. Recuerdo haberlo hecho en mi clase de base de datos en la universidad, pero estaba en MySQL y sinceramente no recuerdo cómo lo hicimos.
Supongo que será una combinación de combinaciones y una declaración GROUP BY
, pero ni siquiera puedo averiguar cómo empezar.
¿Alguien sabe cómo hacer esto? ¡Muchas gracias!
Edit 1: Encontré algo de información sobre el uso de un crosstab que parece ser lo que quiero, pero me cuesta trabajo darle sentido. ¡Los enlaces a mejores artículos serán muy apreciados!
¿Entonces está diciendo que tengo que crear una consulta dinámica en función del número de preguntas que tengo? Creo que podría hacer eso, pero esperaba una solución más simple. –
@Topher: Oracle y SQL Server tienen 'PIVOT' y' UNPIVOT', pero si comprueba la etiqueta pivote verá que las consultas dinámicas son comunes incluso con la función. –
Gracias por la respuesta. Parece que este será el más fácil de implementar incluso si tengo que generar la consulta en tiempo de ejecución. –