Maison >base de données >tutoriel mysql >Comment puis-je transposer une table multi-colonnes en SQL ?
Transposition de listes multiples SQL Server
La transposition de tableau signifie convertir des lignes en colonnes et des colonnes en lignes. Ceci est particulièrement utile lorsque vous devez faire pivoter les données à des fins d’analyse ou de présentations.
Question :
Vous souhaitez transposer un tableau à plusieurs colonnes du format suivant :
Day | A | B |
---|---|---|
Mon | 1 | 2 |
Tue | 3 | 4 |
Wed | 5 | 6 |
Thu | 7 | 8 |
Fri | 9 | 0 |
Convertir au format suivant :
Value | Mon | Tue | Wed | Thu | Fri |
---|---|---|---|---|---|
A | 1 | 3 | 5 | 7 | 9 |
B | 2 | 4 | 6 | 8 | 0 |
Solution :
Pour transposer plusieurs colonnes en SQL, vous pouvez utiliser les fonctions UNPIVOT et PIVOT ensemble.
1. UNPIVOT :
La fonction UNPIVOT dénormalise les données en convertissant les colonnes en lignes. Cela crée un nouveau tableau avec trois colonnes : jour, col et valeur.
<code class="language-sql">select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv</code>
2. PIVOT :
La fonction PIVOT renormalise ensuite les données en convertissant les valeurs du jour en colonnes. Cela produira le tableau transposé.
<code class="language-sql">select * from ( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Remarque :
Appliquer à votre requête :
Pour transposer votre requête spécifique vous pouvez utiliser le code modifié suivant :
<code class="language-sql">select * from ( select LEFT(datename(dw,datetime),3) as DateWeek, col, value from DataTable cross apply ( values ('A', ACalls), ('B', BCalls) ) c (col, value) ) src pivot ( sum(value) for dateweek in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Cela générera un tableau transposé au format souhaité.
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!