J'ai une table avec les données suivantes 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 p> J'ai essayé d'utiliser une instruction imbriquée si p> 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? P> P>
3 Réponses :
Une méthode utilise case code> expressions:
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 note; L'hypothèse ici n'est qu'à propos du nom de colonnes pour être si pour s'appliquer aux données d'échantillon (similaire ) à la tienne en question p> sortie est p> , code> ou
: code> qui ne devrait pas être une grande limitation ici et peut être adressé Si nécessaire)
Task
Tâche
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
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 )
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
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