Maison >base de données >tutoriel mysql >Comment transposer des colonnes dynamiques de SQL Server en lignes à l'aide d'UNPIVOT ?
Transposer les colonnes dynamiques de SQL Server en lignes à l'aide de UNPIVOT
Dans SQL Server, la fonction UNPIVOT permet de transposer des colonnes en lignes, une technique souvent dit non pivotant. Ceci est particulièrement utile lorsque vous travaillez avec des données comportant un nombre de colonnes dynamique ou variable.
Exemple de scénario
Considérez le tableau 1 suivant :
Table1 ----------------------------------------- Id abc brt ccc ddq eee fff gga hxx ----------------------------------------- 12345 0 1 0 5 0 2 0 0 21321 0 0 0 0 0 0 0 0 33333 2 0 0 0 0 0 0 0 41414 0 0 0 0 5 0 0 1 55001 0 0 0 0 0 0 0 2 60000 0 0 0 0 0 0 0 0 77777 9 0 3 0 0 0 0 0
L'objectif est d'annuler le pivotement de la Table1 dans la Table_Résultat_Attendue suivante, en considérant uniquement les valeurs supérieures à 0 :
Expected_Result_Table --------------------- Id Word Qty>0 --------------------- 12345 brt 1 12345 ddq 5 12345 fff 2 33333 abc 2 41414 eee 5 41414 hxx 1 55001 hxx 2 77777 abc 9 77777 ccc 3
Solution utilisant UNPIVOT
La fonction UNPIVOT prend un tableau à plusieurs colonnes et le transforme en un tableau plus large avec deux colonnes supplémentaires : une "valeur " contenant les données des colonnes de la table d'origine et une colonne " nom " identifiant la colonne source.
SELECT Id, name AS Word, value AS Qty>0 FROM Table1 UNPIVOT (value FOR name IN (abc, brt, ccc, ddq, eee, fff, gga, hxx)) AS unpvt WHERE value > 0;
Ceci la requête générera le résultat attendu.
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!