Maison > base de données > tutoriel mysql > Comment faire pivoter dynamiquement des données dans T-SQL à l'aide d'un pivot dynamique ?

Comment faire pivoter dynamiquement des données dans T-SQL à l'aide d'un pivot dynamique ?

Patricia Arquette
Libérer: 2025-01-14 20:11:43
original
342 Les gens l'ont consulté

How to Dynamically Pivot Data in T-SQL Using a Dynamic Pivot?

Transformer les données en T-SQL à l'aide de pivots dynamiques

Parfois, il est nécessaire de convertir les données d'un format large vers un format tabulaire plus structuré. Prenons une situation dans laquelle une table contient plusieurs colonnes de types de données et de valeurs différents, et les données doivent pivoter dynamiquement pour obtenir un ensemble de résultats qui fournit une ligne différente pour chaque ID et la valeur de colonne correspondante.

Une façon de réaliser cette conversion consiste à utiliser la fonctionnalité de pivot dynamique de T-SQL. L'exemple suivant montre comment faire pivoter dynamiquement des données à l'aide de T-SQL :

<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 
                        -- 按 ID 排序以确保列顺序一致
                        ORDER BY '],[' + CAST(t.ID AS VARCHAR(10)) 
                        FOR XML PATH('') 
                      ), 1, 2, '') + ']' 

SELECT  @cols;

-- 动态构建 PIVOT 查询
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;'; 

-- 执行动态 PIVOT 查询
EXECUTE(@query);

-- 删除临时表
DROP TABLE #Table;</code>
Copier après la connexion

Le résultat de l'exécution du script ci-dessus sera un tableau croisé dynamique avec une ligne distincte pour chaque ID et la valeur de colonne correspondante.

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