Maison >base de données >tutoriel mysql >Comment puis-je transposer une table complète dans MS SQL à l'aide de UNPIVOT et PIVOT ?

Comment puis-je transposer une table complète dans MS SQL à l'aide de UNPIVOT et PIVOT ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-14 20:57:44320parcourir

How Can I Transpose a Full Table in MS SQL Using UNPIVOT and PIVOT?

MS SQL Server : Transposition complète de table avec UNPIVOT et PIVOT

La transposition d'une table à plusieurs colonnes dans MS SQL Server nécessite une approche combinée utilisant les fonctions UNPIVOT et PIVOT. UNPIVOT remodèle plusieurs colonnes en lignes, tandis que PIVOT reconvertit les valeurs des lignes en colonnes.

Guide étape par étape :

  1. Données non pivotantes :

    Cette étape transforme les données de vos colonnes en lignes. Remplacez yourtable, A, B, value et col par les noms réels de vos tables et colonnes.

    <code class="language-sql">SELECT day, col, value
    FROM yourtable
    UNPIVOT
    (
        value
        FOR col IN (A, B)
    ) unpiv</code>
  2. Pivotement des données :

    Ici, les données des lignes sont réorganisées en colonnes. Ajustez Mon, Tue, Wed, Thu, Fri pour qu'ils correspondent à vos noms de colonnes spécifiques (jours de la semaine dans cet exemple).

    <code class="language-sql">SELECT *
    FROM (SELECT * FROM ...) src  -- Replace ... with the UNPIVOT query from step 1
    PIVOT
    (
        MAX(value)
        FOR day IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>
  3. Intégration dans les requêtes existantes :

    Pour transposer des données au sein d'une requête existante, incorporez les opérations UNPIVOT et PIVOT :

    <code class="language-sql">SELECT *
    FROM
    (
        SELECT LEFT(DATENAME(dw, datetime), 3) AS DateWeek,
               col,
               value
        FROM DataTable
        CROSS APPLY
        (
            VALUES ('A', ACalls), ('B', BCalls)
        ) c (col, value)
    ) src
    PIVOT
    (
        SUM(value)
        FOR DateWeek IN (Mon, Tue, Wed, Thu, Fri)
    ) piv</code>

Exemple d'utilisation de PIVOT et CROSS APPLY (SQL Server 2008 et versions ultérieures) :

Cet exemple exploite CROSS APPLY pour une solution plus concise.

<code class="language-sql">SELECT day, col, value
FROM yourtable
CROSS APPLY
(
    VALUES ('A', ACalls), ('B', BCalls)
) c (col, value)
PIVOT
(
    MAX(value)
    FOR day IN (Mon, Tue, Wed, Thu, Fri)
) piv</code>

Considérations importantes :

  • La colonne col dans le résultat non pivoté affiche les noms de colonnes d'origine.
  • La fonction MAX() peut être remplacée par d'autres fonctions d'agrégation (comme SUM(), AVG(), etc.) en fonction de vos besoins en données.

Ce guide complet montre comment transposer efficacement des tables entières dans MS SQL Server, offrant flexibilité et adaptabilité pour divers scénarios de manipulation de donné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!

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