Maison >base de données >tutoriel mysql >Comment faire pivoter des données sur plusieurs colonnes à l'aide de la fonction crosstab() de SQL ?

Comment faire pivoter des données sur plusieurs colonnes à l'aide de la fonction crosstab() de SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-14 09:57:43683parcourir

How to Pivot Data on Multiple Columns using SQL's crosstab() Function?

Utilisez Tablefunc pour implémenter un pivot de données multi-colonnes

La fonction crosstab() de SQL est souvent utilisée pour convertir des données au format long en données au format large. Cependant, il suppose généralement que les colonnes, à l'exception des colonnes de nom de ligne et de valeur, sont les mêmes pour chaque ligne portant le même nom de ligne. Cette limitation peut créer des difficultés lorsque vous travaillez avec des ensembles de données comportant des colonnes supplémentaires variables.

Une façon de gérer les pivots multivariés consiste à créer un tableau temporaire avec une colonne de nom de ligne et toutes les colonnes supplémentaires requises. Ensuite, utilisez la fonction crosstab() pour faire pivoter les données, en utilisant la colonne de nom de ligne comme colonne de regroupement principale et les colonnes supplémentaires comme colonnes de regroupement supplémentaires.

Par exemple, considérons les exemples de données suivants :

<code class="language-sql">CREATE TEMP TABLE t4 (
  timeof   timestamp
 ,entity    character
 ,status    integer
 ,ct        integer);

INSERT INTO t4 VALUES 
  ('2012-01-01', 'a', 1, 1)
 ,('2012-01-01', 'a', 0, 2)
 ,('2012-01-02', 'b', 1, 3)
 ,('2012-01-02', 'c', 0, 4);</code>

Pour faire pivoter ces données à l'aide de plusieurs variables, vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT entity, timeof, status, ct
    FROM   t4
    ORDER  BY 1, 2, 3'
 ,$$VALUES (1), (0)$$)
 AS ct ("Attribute" character, "Section" timestamp, "status_1" int, "status_0" int);</code>

Cette requête regroupe les données par colonnes entity et timeof, puis pivote sur les colonnes status et ct en tant que colonnes supplémentaires. Le tableau généré sera au format suivant :

<code>Section | Attribute | status_1 | status_0
2012-01-01 00:00:00 | a         | 1         | 2
2012-01-02 00:00:00 | b         | 3         |
2012-01-02 00:00:00 | c         |           | 4</code>

Comme nous pouvons le constater, les colonnes supplémentaires Attribute sont désormais affichées sous forme de colonnes distinctes, nous permettant de comparer facilement les différentes mesures prises sur chaque entité à un instant donné.

En résumé, l'utilisation de la fonction crosstab() avec une table temporaire peut fournir une méthode personnalisée et efficace de pivotement multivarié. En contrôlant l'ordre des colonnes, nous pouvons déterminer quelles colonnes sont considérées comme des noms de lignes, des colonnes supplémentaires, des colonnes de catégories et des colonnes de valeurs.

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