Maison > base de données > tutoriel mysql > Comment pivoter dynamiquement une table SQL Server avec des catégories variables?

Comment pivoter dynamiquement une table SQL Server avec des catégories variables?

DDD
Libérer: 2025-01-25 18:47:11
original
544 Les gens l'ont consulté

How to Dynamically Pivot a SQL Server Table with Varying Categories?

Utiliser Dynamic SQL pour obtenir la perspective de données

Question:

L'ensemble de données contenant la date, la catégorie et la colonne de montant est converti en une table de perspective avec des catégories dynamiques. Par exemple, les données suivantes:

doit être converti en:

<code>日期        类别        金额
2012年1月1日    ABC             1000.00
2012年2月1日    DEF             500.00
2012年2月1日    GHI             800.00
2012年2月10日   DEF             700.00
2012年3月1日    ABC             1100.00</code>
Copier après la connexion
Solution:

<code>日期        ABC             DEF             GHI
2012年1月1日    1000.00
2012年2月1日                    500.00        800.00
2012年2月10日                   700.00
2012年3月1日    1100.00</code>
Copier après la connexion
SQL Server fournit des fonctions de perspective dynamique qui peuvent être utilisées pour réaliser cette conversion. Le script suivant montre comment réaliser:

Cette méthode utilise un SQL dynamique pour récupérer différentes catégories de la table. Ensuite, il construit dynamiquement des clauses de pivot pour considérer toutes les catégories uniques. Voir ensuite le résultat en conséquence, aligner les données et les données de catégorie.

Résultat:

<code class="language-sql">CREATE TABLE temp (
    date DATETIME,
    category VARCHAR(3),
    amount MONEY
);

INSERT INTO temp VALUES ('2012-01-01', 'ABC', 1000.00);
INSERT INTO temp VALUES ('2012-02-01', 'DEF', 500.00);
INSERT INTO temp VALUES ('2012-02-01', 'GHI', 800.00);
INSERT INTO temp VALUES ('2012-02-10', 'DEF', 700.00);
INSERT INTO temp VALUES ('2012-03-01', 'ABC', 1100.00);


DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'');

SET @query = 'SELECT date, ' + @cols + ' FROM 
            (
                SELECT date, amount, category
                FROM temp
           ) x
            PIVOT 
            (
                 MAX(amount)
                FOR category IN (' + @cols + ')
            ) p ';


EXECUTE(@query);

DROP TABLE temp;</code>
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal