Maison > base de données > tutoriel mysql > Comment transposer une table SQL avec plusieurs colonnes ?

Comment transposer une table SQL avec plusieurs colonnes ?

DDD
Libérer: 2025-01-14 20:52:47
original
292 Les gens l'ont consulté

How to Transpose a SQL Table with Multiple Columns?

Transposer une table SQL avec plusieurs colonnes

Question :

Vous devez transposer une table SQL à plusieurs colonnes, par exemple :

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

Transposer au format suivant :

<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

Solution :

Pour transposer un tableau à plusieurs colonnes, vous pouvez utiliser les fonctions UNPIVOT et PIVOT ensemble.

  1. UNPIVOT : Convertissez plusieurs colonnes (A, B) en lignes et ajoutez une colonne pour les noms de colonnes :
<code class="language-sql">select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv</code>
Copier après la connexion
  1. PIVOT : Convertir la valeur « jour » en colonne et agréger la colonne « valeur » :
<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

Cela générera le tableau transposé requis.

Notes supplémentaires :

  • Si votre version de SQL Server est 2008 ou supérieure, vous pouvez utiliser CROSS APPLY et VALUES au lieu de la fonction UNPIVOT pour transposer les données :
<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  cross apply
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</code>
Copier après la connexion
  • Pour effectuer l'opération de transposition sur votre requête spécifique, vous pouvez utiliser un code similaire à la structure suivante :
<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

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal