Maison > base de données > tutoriel mysql > Comment faire pivoter dynamiquement des données dans T-SQL ?

Comment faire pivoter dynamiquement des données dans T-SQL ?

Patricia Arquette
Libérer: 2025-01-14 20:10:48
original
571 Les gens l'ont consulté

How to Dynamically Pivot Data in T-SQL?

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 [email protected]
2 name John
2 phone 87654321
2 email [email protected]
3 name Sarah
3 phone 55667788
3 email [email protected]

Votre objectif est de convertir ce tableau au format suivant :

ItemID name phone email
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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal