SQL transpose les lignes en colonnes : une solution pivotée
En SQL, la transposition des lignes en colonnes est une technique utile pour remodeler les données tabulaires. Étant donné un tableau avec des lignes représentant des points de données et des colonnes représentant des variables, vous pouvez rencontrer des scénarios dans lesquels il est nécessaire de changer l'orientation des données.
Un de ces scénarios, tel que décrit dans la question, implique des tableaux avec des réponses et des questions. . Le but est de transposer les données de réponse dans un format en colonnes, où chaque question devient une colonne et la réponse de chaque utilisateur à cette question est affichée dans la ligne correspondante.
Pour réaliser cette transposition, vous pouvez utiliser une technique connue comme une « requête pivot ». L'instruction SQL suivante illustre une solution utilisant PostgresSQL :
SELECT r.user_id, MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?", MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?", MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?" FROM RESPONSES r JOIN QUESTIONS q ON q.id = r.question_id GROUP BY r.user_id
Cette requête utilise l'agrégation conditionnelle pour regrouper et agréger les valeurs de réponse en fonction de l'ID de la question. Les instructions CASE extraient les réponses à chaque question et les attribuent à des colonnes spécifiques. La fonction MAX() est utilisée pour garantir que seule la dernière réponse pour chaque paire question-utilisateur est incluse.
Le résultat de cette requête ressemblera au format transposé souhaité, où l'ID de chaque utilisateur est répertorié dans le premier colonne, suivie d'une colonne pour chaque question qui contient la réponse de l'utilisateur (ou NULL si aucune réponse n'existe).
Cette requête pivot est une approche standard pour transposer des lignes en colonnes en SQL. Il fournit une solution efficace et flexible pour gérer dynamiquement un nombre arbitraire de questions et de combinaisons de réponses.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!