Pivot dynamique en T-SQL
Dans le domaine du traitement des données, le pivot dynamique joue un rôle essentiel dans la conversion des données du format ligne au format colonne. Ceci est particulièrement utile lorsque vous devez présenter des données de manière agrégée et structurée.
Supposons que vous ayez un tableau avec des données au format suivant :
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] |
Votre objectif est de convertir ce tableau au format suivant :
ItemID | name | phone | |
---|---|---|---|
1 | Peter | 12345678 | [email protected] |
2 | John | 87654321 | [email protected] |
3 | Sarah | 55667788 | [email protected] |
Dynamic Pivot dans T-SQL vous permet d'implémenter cette transformation de manière dynamique sans avoir besoin d'instructions SQL statiques. Le code suivant montre comment accomplir cette tâche :
<code class="language-sql">CREATE TABLE #Table ( ID INT, ColumnName VARCHAR(250), Value VARCHAR(250) ) INSERT INTO #Table SELECT 1,'name','Peter' INSERT INTO #Table SELECT 1,'phone','12345678' INSERT INTO #Table SELECT 1,'email','[email protected]' INSERT INTO #Table SELECT 2,'name','John' INSERT INTO #Table SELECT 2,'phone','87654321' INSERT INTO #Table SELECT 2,'email','[email protected]' INSERT INTO #Table SELECT 3,'name','Sarah' INSERT INTO #Table SELECT 3,'phone','55667788' INSERT INTO #Table SELECT 3,'email','[email protected]' DECLARE @cols NVARCHAR(2000) DECLARE @query NVARCHAR(4000) SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT '],[' + t.ColumnName FROM #Table AS t FOR XML PATH('') ), 1, 2, '') + ']' 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;' EXECUTE(@query) DROP TABLE #Table</code>
Dans ce code, les fonctions STUFF et EXECUTE sont utilisées pour construire des instructions SQL dynamiques. La requête construite génère dynamiquement des instructions PIVOT basées sur différents noms de colonnes dans la table. La fonction d'agrégation MAX() garantit que la dernière valeur de chaque colonne est renvoyée.
Le résultat final est un tableau converti qui répond à vos besoins pour présenter vos données dans un format pivot. Cette technique est particulièrement utile lorsque vous travaillez avec des ensembles de données plus volumineux et des structures de données complexes.
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!