Maison >base de données >tutoriel mysql >Comment faire pivoter des données tabulaires dans SQL en concaténant des colonnes et en additionnant des valeurs ?
Conversion de données tabulaires en tableau croisé dynamique à l'aide de SQL : concaténation de colonnes
Dans la gestion de bases de données, les tableaux croisés dynamiques impliquent la transformation des données à partir d'un format orienté colonnes à un format orienté ligne, "retournant" efficacement le tableau. Cet article décrit un scénario dans lequel vous souhaitez faire pivoter un tableau comportant plusieurs colonnes en une seule colonne avec les valeurs concaténées des colonnes d'origine.
Supposons que vous disposiez d'un ensemble de données avec des colonnes pour ID, TYPE, SOUS-TYPE, COUNT et MOIS, disposé comme suit :
ID TYPE SUBTYPE COUNT MONTH 1 A Z 1 7/1/2008 1 A Z 3 7/1/2008 2 B C 2 7/2/2008 1 A Z 3 7/2/2008
L'objectif est de convertir ces données dans un tableau croisé dynamique, où les colonnes TYPE et SOUS-TYPE sont concaténés dans une nouvelle colonne et les valeurs COUNT sont additionnées pour chaque combinaison unique d'ID et de MOIS. Le résultat attendu est :
ID A_Z B_C MONTH 1 4 0 7/1/2008 2 0 2 7/2/2008 1 0 3 7/2/2008
Solution PIVOT SQL Server
SQL Server 2005 offre de puissants opérateurs PIVOT et UNPIVOT qui simplifient le pivotement des données. L'exemple de code suivant illustre la technique PIVOT :
DECLARE @sql AS varchar(max) DECLARE @pivot_list AS varchar(max) DECLARE @select_list AS varchar(max) SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']' ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']' FROM ( SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE FROM stackoverflow_159456 ) AS PIVOT_CODES SET @sql = ' ;WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM stackoverflow_159456 GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM p PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS pvt ' EXEC (@sql)
La technique SQL dynamique utilisée dans ce code génère automatiquement l'instruction PIVOT basée sur la combinaison distincte de valeurs TYPE et SUBTYPE, évitant ainsi le codage en dur et rendant le code sans entretien.
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!