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>
<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>
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>
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!