Tableau croisé dynamique et concaténer des colonnes dans SQL Server
La transformation des tables de base de données pour afficher les données de manière plus organisée et significative est souvent nécessaire pour les données analyse et présentation. Dans ce cas précis, le but est de créer un "tableau croisé dynamique" à partir d'une table de base de données, où les colonnes TYPE et SUBTYPE sont concaténées dans de nouvelles colonnes et les valeurs COUNT sont agrégées par les colonnes ID et MOIS.
Comprendre l'opérateur PIVOT
SQL Server propose l'opérateur PIVOT, qui vous permet de transformer des données à partir d'un format orienté ligne. format vers un format orienté colonne. Il vous permet de regrouper les données par une ou plusieurs colonnes et de créer de nouvelles colonnes basées sur les valeurs d'une autre colonne.
Génération dynamique de colonnes pivotantes
Dans le scénario donné , il existe potentiellement des « centaines » de combinaisons TYPE et SUBTYPE, ce qui rend peu pratique le codage en dur des colonnes pivot. Pour surmonter ce problème, le SQL dynamique peut être utilisé pour générer la liste des colonnes pivot en fonction des combinaisons uniques de valeurs TYPE et SUBTYPE.
Implémentation du SQL dynamique
Le SQL suivant le code montre comment générer dynamiquement les colonnes pivot et exécuter l'opération PIVOT :
DECLARE @sql AS NVARCHAR(MAX); DECLARE @pivot_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique DECLARE @select_list AS NVARCHAR(MAX) = NULL; -- Leave NULL for COALESCE technique -- Build the pivot column list and select list 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 YourTableName ) AS PIVOT_CODES; -- Generate the dynamic SQL query SET @sql = ' WITH P AS ( SELECT ID, [MONTH], TYPE + ''_'' + SUBTYPE AS PIVOT_CODE, SUM(COUNT) AS [COUNT] FROM YourTableName GROUP BY ID, [MONTH], TYPE + ''_'' + SUBTYPE ) SELECT ID, [MONTH], ' + @select_list + ' FROM P PIVOT ( SUM([COUNT]) FOR PIVOT_CODE IN ( ' + @pivot_list + ' ) ) AS PVT'; -- Execute the dynamic SQL query EXEC (@sql);
Avantages de l'utilisation SQL dynamique
En utilisant le SQL dynamique, les colonnes pivot sont générées automatiquement, éliminant ainsi le besoin de concaténation manuelle. Cette approche est flexible et peut être appliquée aux tableaux avec de nombreuses combinaisons TYPE et SUBTYPE.
Remarque :
Le code ci-dessus utilise la fonction COALESCE pour concaténer la liste des colonnes pivot. et sélectionnez la liste. Alternativement, vous pouvez spécifier manuellement l'opérateur de concaténation (',' ou ';') selon vos besoins.
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!