Maison >base de données >tutoriel mysql >Comment puis-je faire pivoter dynamiquement des données dans BigQuery lorsque les valeurs des colonnes pivotées sont inconnues ?

Comment puis-je faire pivoter dynamiquement des données dans BigQuery lorsque les valeurs des colonnes pivotées sont inconnues ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-23 07:05:03779parcourir

How Can I Dynamically Pivot Data in BigQuery When Pivot Column Values Are Unknown?

Utilisation dynamique de la fonction PIVOT de BigQuery

Le dernier ajout de BigQuery, la fonction PIVOT, a suscité une attention considérable pour sa capacité à transformer les données dans un format semblable à celui d'un tableau croisé dynamique. . Cependant, face à des scénarios dans lesquels les valeurs des colonnes pivot ne sont pas connues à l'avance, les méthodes conventionnelles peuvent s'avérer inefficaces.

Dans de tels cas, une approche dynamique utilisant la concaténation de chaînes peut contourner cette limitation. En générant dynamiquement la requête pivot basée sur les valeurs distinctes de la colonne quart, nous pouvons gérer efficacement n'importe quel nombre de valeurs pivot inconnues.

Extrait de code

L'extrait de code suivant illustre cette approche dynamique :

execute immediate (             
select '''select * from (select * from `project.dataset.Produce`)
  pivot(sum(sales) for quarter in ("''' ||  string_agg(quarter, '", "')  || '''"))
'''
from (select distinct quarter from `project.dataset.Produce` order by quarter) 
);

Comment ça marche

  1. EXECUTE IMMEDIATE : Cette instruction de manière dynamique exécute la chaîne de requête générée.
  2. Génération de requête :

    • select '''select * from (select * from project.dataset.Produce) : récupère les données du Produire une table en tant que sous-requête.
    • pivot(sum(sales) for quarter in ("''' : commencez l'opération PIVOT en spécifiant la somme des ventes pour la colonne du trimestre.
    • string_agg( quarter, '", "') : concatène dynamiquement les valeurs trimestrielles distinctes dans une chaîne séparée par des virgules entourée de guillemets doubles pour servir de liste de colonnes pivot.
    • "'''")) : Complétez le PIVOT clause.
  3. Sous-requête :

    • (sélectionnez un trimestre distinct dans project.dataset.Produce order by quarter) : récupérez les valeurs trimestrielles distinctes par ordre croissant afin de garantir une colonne pivotante appropriée commande.

Avantages

Cette approche dynamique offre plusieurs avantages :

  • Évolutivité : Elle est transparente gère un nombre arbitraire de valeurs de colonnes pivots, offrant flexibilité et facilité de utilisation.
  • Concision : la concaténation de chaînes permet la construction de la requête PIVOT en une seule instruction, améliorant ainsi la clarté du code.

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