0
votes

Big Query Trouvez des données qui pourraient être dans plusieurs colonnes

J'ai une table avec les données suivantes xxx

J'aimerais créer une vue qui affichait toujours les noms de tâches dans la même colonne ou null s'il ne pouvait être trouvé dans aucun des colonnes, par exemple xxx

J'ai essayé d'utiliser une instruction imbriquée si xxx

mais comme il y a 50 ou Alors des colonnes dans le jeu de données réel, cela ressemble à une solution stupide et serait complexe très rapidement, y a-t-il une manière plus intelligente ici?


2 commentaires

Lorsque vous dites 50 colonnes - voulez-vous dire "taskn_name" et "taskn_date 'colonnes avec n jusqu'à 50?


@Mikhailberlyant Yes Oui, désolé de ne pas être super clair


3 Réponses :


1
votes

Une méthode utilise case expressions: xxx


0 commentaires

1
votes

ci-dessous est destiné à SQL standard de Bigquery et suffisamment générique pour répondre aux préoccupations exprimées en question. Vous n'avez pas besoin de savoir à l'avance Nombre de noms de colonnes et de tâches (bien qu'ils ne doivent pas avoir , ou : qui ne devrait pas être une grande limitation ici et peut être adressé Si nécessaire) xxx

note; L'hypothèse ici n'est qu'à propos du nom de colonnes pour être Task _Name et Tâche _Date

si pour s'appliquer aux données d'échantillon (similaire ) à la tienne en question xxx

sortie est xxx


4 commentaires

Juste pour noter que Actuellement (en 2020) BigQuery nécessite des tables Temps de création à l'aide d'un script cloud.google.com/bigquery/docs/reeference/standard-sql/script Ing


Qu'est-ce que vous entendez par commentaire ci-dessus? C'est un script!


Ah, c'était juste une note à quiconque qui vient d'être capable de passer la requête dans l'éditeur de requête à BigQuery 😀


j'ai compris. Alors, est-ce que cela fonctionne pour vous? envisager de voter / accepter



1
votes

Voici une autre solution qui n'utilise pas Dynamic SQL, ne s'appuie pas sur des noms de colonne spécifiques et fonctionne avec un nombre arbitraire de colonnes:

WITH table AS (
  SELECT 1 id, 'breakfast' task1_name, '1/1/21' task1_date, NULL task2_name, NULL task2_date UNION ALL
  SELECT 2, NULL, NULL, 'breakfast', '1/1/22' UNION ALL
  SELECT 3, NULL, NULL, 'lunch', '1/1/23' UNION ALL
  SELECT 4, 'dinner', '1/1/24', 'lunch', '1/1/10'
)
SELECT 
  REGEXP_EXTRACT(f, r'breakfast\, ([^\,\)]*)'),
  REGEXP_EXTRACT(f, r'lunch\, ([^\,\)]*)'),
  REGEXP_EXTRACT(f, r'dinner\, ([^\,\)]*)')
FROM (
  SELECT FORMAT("%t", t) f FROM table t
)


2 commentaires

Pourriez-vous expliquer un peu plus sur le format SELECT ("% T", T) F du tableau T fait? 🤔


"De la table t" fait "T" un alias à la ligne (qui a type de structure). Elément de format "% T" formate chaque type de données en formulaire lisible, alors nous construisons ici la chaîne de la rangée de la table. Puis analyser avec Regexp_extract