Tableau croisé dynamique et concaténation de colonnes dans SQL Server
La base de données SQL Server donnée contient des enregistrements avec ID, TYPE, SOUS-TYPE, COUNT et MOIS colonnes. L'objectif est de transformer ces données en un tableau croisé dynamique où TYPE et SUBTYPE sont concaténés dans de nouvelles colonnes et COUNT est additionné pour faire correspondre les valeurs ID et MONTH.
Pour y parvenir, SQL Server fournit l'opérateur PIVOT, qui dynamiquement génère des colonnes basées sur les valeurs fournies. Voici comment vous pouvez aborder ce problème à l'aide de 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 TableName ) AS PIVOT_CODES; SET @sql = ';WITH p AS ( SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT] FROM TableName 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);
Ce code génère dynamiquement la liste de colonnes requise et utilise l'opérateur PIVOT pour créer le tableau croisé dynamique. La sortie résultante aura le format souhaité avec des colonnes TYPE et SUBTYPE concaténées et des valeurs COUNT additionnées.
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!