Maison >base de données >tutoriel mysql >Comment transposer des lignes en colonnes dans BigQuery ?

Comment transposer des lignes en colonnes dans BigQuery ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 18:33:43460parcourir

How to Transpose Rows into Columns in BigQuery?

Transposer des lignes en colonnes dans BigQuery : une implémentation pivotante

La transposition de lignes en colonnes, également appelée pivotement, vous permet de convertir des paires clé-valeur en une nouvelle table où les clés deviennent des noms de colonnes et les valeurs sont placées dans les cellules correspondantes. Même si BigQuery ne prend pas en charge de manière native les fonctions de pivotement, vous pouvez toujours y parvenir en utilisant une approche simple.

Structure de la table d'entrée

Pour commencer, assurez-vous que votre table d'entrée comporte les colonnes suivantes :

  • Clé : La colonne qui désigne la catégorie pour chacun row.
  • Valeur : La valeur qui correspond à la clé.

De plus, vous aurez besoin d'une colonne qui regroupe les lignes qui doivent être combinées en une seule ligne dans la sortie.

Étape 1 : Conversion des données d'entrée en une chaîne de requête transposée

À l'étape 1, nous allons créer une chaîne de requête qui, une fois exécutée, générera la requête transposée. Exécutez la requête suivante :

SELECT 'SELECT id, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
   ) 
   + ' FROM yourTable GROUP BY id ORDER BY id'
FROM (
  SELECT key 
  FROM yourTable
  GROUP BY key
  ORDER BY key
) 

Étape 2 : Exécution de la requête transposée

Copiez le résultat de l'étape 1 et exécutez-le comme une requête normale. Cela produira un tableau avec les données transposées :

SELECT 
  id, 
  MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
  MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
  MAX(IF(key = "examId", value, NULL)) AS [examId],
  MAX(IF(key = "postId", value, NULL)) AS [postId],
  MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
FROM yourTable 
GROUP BY id 
ORDER BY id

Le tableau résultant aura la structure suivante :

id channel_id channel_title examId postId youtube_id
1 UCiDKcjKocimAO1tV Mahendra Guru 72975611-4a5e-11e5 1189e340-b08f ugEGMG4-MdA
2 UCODeKM_D6JLf8jJt Ab Live 72975611-4a5e-11e5 0c3e6590-afeb 3TNbtTwLY0U

Remarque

Si votre tableau a un grand nombre de colonnes, vous pouvez ignorer l'étape 1 en construisant manuellement la requête transposée. Cependant, l'étape 1 fournit un moyen rapide et pratique de générer la requête de manière dynamique.

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