Maison >base de données >tutoriel mysql >Comment puis-je faire pivoter un tableau sans utiliser de 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>
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>
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>
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!