Pivot dynamique en T-SQL
La conversion des données tabulaires dans un format plus concis est essentielle pour l'analyse des données et la génération de rapports. Une technique couramment utilisée est le pivotement, qui consiste à convertir des lignes en colonnes. Dans cet exemple, notre objectif est de faire pivoter les données d'un tableau avec une structure similaire à :
ItemID | ColumnName | Value |
---|---|---|
1 | name | Peter |
1 | phone | 12345678 |
1 | [email protected] | |
2 | name | John |
2 | phone | 87654321 |
2 | [email protected] | |
3 | name | Sarah |
3 | phone | 55667788 |
3 | [email protected] |
Convertir vers une structure plus conviviale :
ItemID | name | phone | |
---|---|---|---|
1 | Peter | 12345678 | [email protected] |
2 | John | 87654321 | [email protected] |
3 | Sarah | 55667788 | [email protected] |
Pour y parvenir en T-SQL à l'aide de pivots dynamiques, suivez ces étapes :
Créer une liste de colonnes dynamique :
<code class="language-sql"> DECLARE @cols NVARCHAR(2000) SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + t.ColumnName FROM #Table AS t FOR XML PATH('') ), 1, 2, '') + ']' </code>
Créer une requête dynamique :
<code class="language-sql"> DECLARE @query NVARCHAR(4000) SET @query = N'SELECT ID,'+ @cols +' FROM (SELECT t1.ID,t1.ColumnName , t1.Value FROM #Table AS t1) p PIVOT (MAX([Value]) FOR ColumnName IN ( '+ @cols +' )) AS pvt;' </code>
Exécuter la requête :
<code class="language-sql"> EXECUTE(@query)</code>
La requête générée fera pivoter dynamiquement les données, créant une structure de tableau plus compacte et plus facile à lire.
Cette approche fournit un mécanisme flexible pour faire pivoter les données, en particulier si les noms de colonnes sont dynamiques ou peuvent changer. Il permet une transformation efficace et automatisée des données, ce qui en fait un outil puissant pour une variété d'applications d'analyse de données et de reporting.
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!