Maison > base de données > tutoriel mysql > Comment puis-je faire pivoter un tableau sans utiliser de fonctions d'agrégation ?

Comment puis-je faire pivoter un tableau sans utiliser de fonctions d'agrégation ?

Barbara Streisand
Libérer: 2025-01-20 09:47:08
original
418 Les gens l'ont consulté

How Can I Pivot a Table Without Using Aggregate Functions?

Conversion de données de tableau croisé dynamique sans fonctions d'agrégation

Dans le domaine du traitement des données, il est parfois nécessaire de remodeler les données dans un format plus convivial ou plus pratique pour l'analyse. L’une des techniques les plus courantes pour y parvenir est le pivotement, où les données sont transformées dans une présentation plus large. Bien que le pivotement implique généralement des valeurs agrégées, il peut également être effectué sans utiliser de fonctions d’agrégation.

Considérez le tableau suivant :

<code class="language-sql">CREATE TABLE Data (
  CustomerID int,
  DBColumnName varchar(50),
  Data varchar(50)
);

INSERT INTO Data (CustomerID, DBColumnName, Data)
VALUES
  (1, 'FirstName', 'Joe'),
  (1, 'MiddleName', 'S'),
  (1, 'LastName', 'Smith'),
  (1, 'Date', '12/12/2009'),
  (2, 'FirstName', 'Sam'),
  (2, 'MiddleName', 'S'),
  (2, 'LastName', 'Freddrick'),
  (2, 'Date', '1/12/2009'),
  (3, 'FirstName', 'Jaime'),
  (3, 'MiddleName', 'S'),
  (3, 'LastName', 'Carol'),
  (3, 'Date', '12/1/2009');</code>
Copier après la connexion

Ce tableau contient des données pour plusieurs clients, où chaque enregistrement représente un attribut spécifique (FirstName, MiddleName, LastName, Date) et sa valeur associée. L'objectif est de faire pivoter ces données dans un format plus lisible :

<code class="language-sql">CREATE TABLE PivotedData (
  CustomerID int,
  FirstName varchar(50),
  MiddleName varchar(50),
  LastName varchar(50),
  Date varchar(50)
);

INSERT INTO PivotedData (CustomerID, FirstName, MiddleName, LastName, Date)
VALUES
  (1, 'Joe', 'S', 'Smith', '12/12/2009'),
  (2, 'Sam', 'S', 'Freddrick', '1/12/2009'),
  (3, 'Jaime', 'S', 'Carol', '12/1/2009');</code>
Copier après la connexion

Il est important de noter que cette transformation n'agrège pas les données. Au lieu de cela, il conserve une valeur unique pour chaque attribut de chaque client.

Pour réaliser cette transformation sans utiliser de fonctions d'agrégation, nous pouvons utiliser une expression CASE dans une instruction SELECT groupée :

<code class="language-sql">SELECT
  CustomerID,
  MIN(CASE DBColumnName WHEN 'FirstName' THEN Data END) AS FirstName,
  MIN(CASE DBColumnName WHEN 'MiddleName' THEN Data END) AS MiddleName,
  MIN(CASE DBColumnName WHEN 'LastName' THEN Data END) AS LastName,
  MIN(CASE DBColumnName WHEN 'Date' THEN Data END) AS Date
FROM Data
GROUP BY CustomerID;</code>
Copier après la connexion

Cette requête utilise une série d'expressions CASE pour sélectionner conditionnellement la valeur associée à chaque attribut pour chaque client. La fonction MIN() est utilisée pour récupérer une valeur unique qui répond à une condition spécifiée, garantissant que nous ne contenons qu'une seule valeur par attribut. En regroupant les résultats par CustomerID, nous créons une ligne pour chaque client avec ses attributs et valeurs correspondants.

Cette technique permet un pivotement flexible des données sans utiliser de fonctions d'agrégation. Ceci est particulièrement utile lorsque les données nécessitent une transformation minimale et que les valeurs d'origine doivent être préservées.

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