Maison >base de données >tutoriel mysql >Comment puis-je transposer une table complète dans MS SQL à l'aide de UNPIVOT et PIVOT ?
MS SQL Server : Transposition complète de table avec UNPIVOT et PIVOT
La transposition d'une table à plusieurs colonnes dans MS SQL Server nécessite une approche combinée utilisant les fonctions UNPIVOT
et PIVOT
. UNPIVOT
remodèle plusieurs colonnes en lignes, tandis que PIVOT
reconvertit les valeurs des lignes en colonnes.
Guide étape par étape :
Données non pivotantes :
Cette étape transforme les données de vos colonnes en lignes. Remplacez yourtable
, A
, B
, value
et col
par les noms réels de vos tables et colonnes.
<code class="language-sql">SELECT day, col, value FROM yourtable UNPIVOT ( value FOR col IN (A, B) ) unpiv</code>
Pivotement des données :
Ici, les données des lignes sont réorganisées en colonnes. Ajustez Mon
, Tue
, Wed
, Thu
, Fri
pour qu'ils correspondent à vos noms de colonnes spécifiques (jours de la semaine dans cet exemple).
<code class="language-sql">SELECT * FROM (SELECT * FROM ...) src -- Replace ... with the UNPIVOT query from step 1 PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Intégration dans les requêtes existantes :
Pour transposer des données au sein d'une requête existante, incorporez les opérations UNPIVOT
et PIVOT
:
<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>
Exemple d'utilisation de PIVOT et CROSS APPLY (SQL Server 2008 et versions ultérieures) :
Cet exemple exploite CROSS APPLY
pour une solution plus concise.
<code class="language-sql">SELECT day, col, value FROM yourtable CROSS APPLY ( VALUES ('A', ACalls), ('B', BCalls) ) c (col, value) PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
Considérations importantes :
col
dans le résultat non pivoté affiche les noms de colonnes d'origine.MAX()
peut être remplacée par d'autres fonctions d'agrégation (comme SUM()
, AVG()
, etc.) en fonction de vos besoins en données.Ce guide complet montre comment transposer efficacement des tables entières dans MS SQL Server, offrant flexibilité et adaptabilité pour divers scénarios de manipulation de données.
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!