Requête PIVOT sur des enregistrements distincts avec association conservée
Considérez le scénario dans lequel nous avons un tableau avec des données contenant des activités et des pourcentages pour les individus. Une requête PIVOT standard utilisant la fonction MAX peut ignorer les activités avec des valeurs de pourcentage nulles. Pour résoudre ce problème, nous introduisons une solution qui préserve la relation entre les activités et les pourcentages.
Pour y parvenir, nous incorporons une fonction ROW_NUMBER() dans l'expression de table commune (CTE) pour ordonner séquentiellement les activités au sein de chaque groupe de noms. Avec cette technique, la requête PIVOT peut conserver l'association entre les activités et les pourcentages sur plusieurs lignes.
Voici un exemple de la requête révisée :
;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
Le CTE, cte, ajoute un ROWNUM colonne au tableau initial, en classant les activités pour chaque nom par ordre décroissant de pourcentage. Cet ordre permet à la requête PIVOT suivante de regrouper et d'agréger correctement les données.
Le résultat de la requête ressemblera au résultat attendu, où des activités distinctes sont associées à leurs noms et pourcentages respectifs :
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
Grâce à cette technique, nous pouvons obtenir des résultats PIVOT complets et précis tout en conservant l'association entre les activités et les pourcentages, même pour les enregistrements avec des valeurs de pourcentage nulles.
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!