Maison > base de données > tutoriel mysql > Comment puis-je transposer une table multi-colonnes en SQL ?

Comment puis-je transposer une table multi-colonnes en SQL ?

Patricia Arquette
Libérer: 2025-01-14 21:01:43
original
555 Les gens l'ont consulté

How Can I Transpose a Multi-Column Table in SQL?

Transposition de listes multiples SQL Server

La transposition de tableau signifie convertir des lignes en colonnes et des colonnes en lignes. Ceci est particulièrement utile lorsque vous devez faire pivoter les données à des fins d’analyse ou de présentations.

Question :

Vous souhaitez transposer un tableau à plusieurs colonnes du format suivant :

Day A B
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0

Convertir au format suivant :

Value Mon Tue Wed Thu Fri
A 1 3 5 7 9
B 2 4 6 8 0

Solution :

Pour transposer plusieurs colonnes en SQL, vous pouvez utiliser les fonctions UNPIVOT et PIVOT ensemble.

1. UNPIVOT :

La fonction UNPIVOT dénormalise les données en convertissant les colonnes en lignes. Cela crée un nouveau tableau avec trois colonnes : jour, col et valeur.

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

2. PIVOT :

La fonction PIVOT renormalise ensuite les données en convertissant les valeurs du jour en colonnes. Cela produira le tableau transposé.

<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

Remarque :

  • La fonction d'agrégation MAX est utilisée dans les requêtes PIVOT pour garantir que les valeurs en double sont traitées correctement.
  • Pour SQL Server 2008 et versions ultérieures, vous pouvez utiliser la syntaxe CROSS APPLY avec VALUES pour inverser les données au lieu de UNPIVOT.

Appliquer à votre requête :

Pour transposer votre requête spécifique vous pouvez utiliser le code modifié suivant :

<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

Cela générera un tableau transposé 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