J'ai une énigme intéressante qui, je crois, peut être résolue en langage SQL. J'ai des tableaux semblables à ce qui suit:Lignes de transposition SQL en tant que colonnes
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?
et je voudrais obtenir la sortie suivante
user_id | Do you like apples? | Do you like oranges? | Do you like carrots?
---------------------------------------------------------------------------
1 | Yes | Yes | No
2 | Yes | No | No
Je ne sais pas combien de questions il y aura, et ils seront dynamiques, de sorte Je ne peux pas simplement coder pour chaque question. J'utilise PostgreSQL et je crois que c'est ce que l'on appelle la transposition, mais je n'arrive pas à trouver quoi que ce soit qui dit la façon standard de le faire en SQL. Je me souviens d'avoir fait ça dans ma classe de base de données à l'université, mais c'était en MySQL et je ne me souviens vraiment pas comment nous l'avons fait.
Je suppose que ce sera une combinaison de jointures et une instruction GROUP BY
, mais je ne peux même pas comprendre comment démarrer.
Quelqu'un sait-il comment faire? Merci beaucoup!
Edit 1: J'ai trouvé quelques informations sur l'utilisation d'un crosstab qui semble être ce que je veux, mais je vais avoir du mal à faire sens. Des liens vers de meilleurs articles seraient grandement appréciés!
Donc vous dites que je dois construire une requête dynamique basée sur le nombre de questions que j'ai? Je suppose que je pouvais le faire, mais j'espérais une solution plus simple. –
@Topher: Oracle & SQL Server ont 'PIVOT' et' UNPIVOT', mais si vous vérifiez la balise pivot, vous verrez que les requêtes dynamiques sont courantes même avec la fonction. –
Merci pour la réponse. On dirait que ce sera le plus facile à implémenter même si je dois générer la requête à l'exécution. –