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
350 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 :
select day, col, value
from yourtable
unpivot
(
  value
  for col in (A, B)
) unpiv
Copier après la connexion
  1. PIVOT : Convertir la valeur « jour » en colonne et agréger la colonne « valeur » :
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
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 :
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
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 :
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
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!

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