Maison > base de données > tutoriel mysql > Comment faire pivoter et concaténer des colonnes dans SQL Server à l'aide de l'opérateur PIVOT ?

Comment faire pivoter et concaténer des colonnes dans SQL Server à l'aide de l'opérateur PIVOT ?

Mary-Kate Olsen
Libérer: 2025-01-01 12:23:13
original
730 Les gens l'ont consulté

How to Pivot and Concatenate Columns in SQL Server Using the PIVOT Operator?

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal