Maison > base de données > tutoriel mysql > Comment éviter la perte de données lors de l'utilisation de requêtes PIVOT sur des enregistrements distincts avec des valeurs nulles ?

Comment éviter la perte de données lors de l'utilisation de requêtes PIVOT sur des enregistrements distincts avec des valeurs nulles ?

DDD
Libérer: 2025-01-05 20:20:41
original
1003 Les gens l'ont consulté

How to Avoid Data Loss When Using PIVOT Queries on Distinct Records with Zero Values?

Éviter la perte de données dans les requêtes PIVOT pour des enregistrements distincts

Problème :
Les requêtes PIVOT sont utiles pour la restructuration données pour afficher les informations de manière plus organisée. Cependant, lorsqu'il s'agit d'enregistrements distincts, la fonction d'agrégation MAX peut entraîner l'omission de valeurs nulles, conduisant à des données incomplètes.

Solution :
Pour conserver tous les enregistrements distincts, même ceux avec des valeurs nulles, on peut incorporer la fonction ROW_NUMBER() dans la requête PIVOT. Cette approche attribue un numéro de ligne à chaque enregistrement, en conservant l'association entre les activités et les pourcentages.

;with cte as 
(
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from A
),
cte2 as
(
    SELECT Id,Code,ROWNUM,James,James_,Sam,Sam_,Lisa,Lisa_
    FROM cte
    PIVOT(MAX(activity)
          FOR name IN (James,Sam,Lisa)) AS PVTTable PIVOT
          (
          MAX(percentage)
          FOR name1 IN (James_,Sam_,Lisa_)) AS PVTTable1
)
select Id, Code, MAX(James) James, MAX(James_) James_, MAX(Sam) Sam, MAX(Sam_) Sam_, MAX(Lisa) Lisa, MAX(Lisa_) Lisa_
from cte2
group by Id, Code, ROWNUM
Copier après la connexion

Exemple :

Considérez le tableau suivant :

Id Code percentage name name1 activity
1 Prashant 43.43 James James_ Running
1 Prashant 70.43 Sam Sam_ Cooking
1 Prashant 90.34 Lisa Lisa_ Walking
1 Prashant 0.00 James James_ Stealing
1 Prashant 0.00 James James_ Lacking
1 Prashant 73 Sam Sam_ Cooking 1

Auparavant, une requête PIVOT standard aurait produit ce qui suit résultat :

Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.0 Cooking 3.43 NULL NULL
1 Prashant NULL NULL NULL NULL NULL NULL

Cependant, en incorporant la fonction ROW_NUMBER(), la requête modifiée conserve tous les enregistrements distincts :

Id Code James James_ Sam Sam_ Lisa Lisa_
1 Prashant Running 43.43 Cooking 1 73 Walking 90.34
1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL
1 Prashant Lacking 0.00 NULL NULL NULL NULL

Cette approche garantit que toutes les activités distinctes sont affichées, même celles avec des valeurs de pourcentage nulles, fournissant une représentation plus précise des donné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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal