Maison > base de données > tutoriel mysql > Comment transposer des tables en SQL à l'aide de UNPIVOT et PIVOT ?

Comment transposer des tables en SQL à l'aide de UNPIVOT et PIVOT ?

Barbara Streisand
Libérer: 2025-01-14 21:06:44
original
570 Les gens l'ont consulté

How to Transpose Tables in SQL Using UNPIVOT and PIVOT?

Transposition de table SQL : application des fonctions UNPIVOT et PIVOT

La transposition d'une table en SQL peut être réalisée en utilisant une combinaison de fonctions UNPIVOT et PIVOT. La fonction UNPIVOT convertit les colonnes en lignes, tandis que la fonction PIVOT convertit les lignes en colonnes.

Données UNPIVOT

La fonction UNPIVOT est utilisée pour convertir plusieurs colonnes en une seule colonne. Dans l'exemple, les colonnes A et B doivent être développées. La requête suivante illustre ce processus :

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv;</code>
Copier après la connexion

Cette requête créera une nouvelle table avec trois colonnes : jour, col et valeur. La colonne col contiendra le nom de la colonne (A ou B) et la colonne valeur contiendra la valeur correspondante de la colonne développée.

Données PIVOT

La fonction PIVOT est utilisée pour convertir des lignes en colonnes. Dans cet exemple, les valeurs du jour (Lun, Mar, Mer, Jeu, Vendredi) doivent être converties en colonnes :

<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv;</code>
Copier après la connexion

La requête finale produira le résultat souhaité :

<code>Value | Mon | Tue | Wed | Thu | Fri
-------|-----|-----|-----|-----|-----
A      | 1   | 3   | 5   | 7   | 9
B      | 2   | 4   | 6   | 8   | 0</code>
Copier après la connexion

Appliquer la solution à votre requête

Pour appliquer cette solution à votre requête spécifique, vous pouvez la modifier comme suit :

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

Cette requête transformera les données de votre DataTable au format souhaité.

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