Données pivot dynamiques dans SQL Server à l'aide de requêtes dynamiques
Cet article explique comment convertir les données des colonnes de date, de catégorie et de montant dans un format plus structuré qui regroupe les montants par date et par catégorie.
À cette fin, des requêtes pivot dynamiques peuvent être utilisées. Le pivotement est une fonction de SQL Server qui vous permet de faire pivoter les lignes d'une table en colonnes. Dans ce cas, le point pivot est la colonne date et la colonne résultante sera la catégorie.
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);</code>
Pour construire une requête pivot dynamique, nous définissons d'abord deux variables : @cols
pour contenir les catégories, et @query
pour stocker la requête finale.
<code class="language-sql">SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')</code>
Ensuite, nous construisons les variables @cols
en concaténant les différentes catégories avec des virgules, en nous assurant qu'elles sont placées entre guillemets doubles.
<code class="language-sql">set @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p '</code>
Enfin, nous attribuons la chaîne de requête à @query
. La requête commence par sélectionner la colonne de date et toutes les catégories en tant que colonnes. Il utilise ensuite PIVOT pour faire pivoter les données, avec la colonne de date comme en-tête de ligne et la catégorie comme en-tête de colonne.
<code class="language-sql">execute(@query)</code>
L'exécution de @query
renverra les résultats souhaités, en faisant pivoter les données selon les besoins.
<code>日期 ABC DEF GHI 2012-01-01 00:00:00.000 1000.00 NULL NULL 2012-02-01 00:00:00.000 NULL 500.00 800.00 2012-02-10 00:00:00.000 NULL 700.00 NULL 2012-03-01 00:00:00.000 1100.00 NULL NULL</code>
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!