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 ?

Comment faire pivoter des données tabulaires dans SQL en concaténant des colonnes et en additionnant des valeurs ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 17:39:41441parcourir

How to Pivot Tabular Data in SQL by Concatenating Columns and Summing Values?

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!

Déclaration:
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