web-dev-qa-db-fra.com

Feuille de calcul Google "= QUERY" join () fonction équivalente?

Cette question concerne la jointure de deux bases de données dans une feuille de calcul Google à l'aide de la fonction = QUERY

J'ai une table comme celle-ci dans la plage A1: C3

a d g
b e h
c f i

J'ai une autre table

c j m
a k n
b l o

Je veux que la table finale ressemble à ceci

a d g k n
b e h l o 
c f i j m

Je peux le faire en utilisant une fonction vlookup assez facilement dans la cellule D1 et en le collant, mais mon ensemble de données est énorme. J'aurais besoin d'une page entière de vlookups et Google Spreadsheet indique que je suis à la limite de la complexité.

Je regarde la référence du langage de requête de Google ... il ne semble pas y avoir de type de "jointure" mentionné. Vous penseriez que ce serait une opération facile du type "rejoindre sur A".

Quelqu'un peut-il résoudre ce problème sans vlookup?

45
jason

Réponse courte

Google QUERY Language _ la version 0.7 (2016) n'inclut pas d'opérateur JOIN (LEFT JOIN), mais cela peut être obtenu à l'aide d'une formule matricielle dont le résultat pourrait être utilisé comme entrée pour la fonction QUERY ou pour d'autres utilisations .

Explication

Les formules de tableau et les fonctionnalités de gestion de tableaux de Google Sheets permettent de faire une jointure entre deux tableaux simples. Afin de faciliter la lecture, la formule proposée utilise des plages nommées au lieu de références de plages.

Plages nommées

  • table1: feuille1! A1: C3
  • table2: feuille2! A1: C3
  • ID: feuille1! A1: A3

Formule

 = ArrayFormula (
 {
 Table1, 
 Vlookup (ID, table2, COLUMN (Indirect ("R1C2: R1C" & COLUMNS (table2), 0)), 0) 
} 
 .) 

Remarques: 

  • L'utilisation de plages ouvertes est possible, mais cela pourrait ralentir la feuille de calcul.
  • Pour augmenter le temps de recalcul:
    1. Remplacez Indirect("R1C2:R1C"&COLUMNS(table2),0) par un tableau de constantes allant de 2 au nombre de colonnes de table2. 
    2. Supprimer les lignes vides de la feuille de tableau

Exemple

Voir cette feuille pour un exemple 

Remarque

En 2017, Google a amélioré l'article d'aide officiel en anglais sur QUERY, fonction QUERY . Il ne contient toujours pas encore de sujets comme celui-ci, mais il pourrait être utile de comprendre comment cela fonctionne.

26
Rubén

Vous pouvez utiliser ARRAYFORMULA ou VOUS pouvez simplement faire glisser cette formule: Après une importation ou QUERY- dans la première table; dans la colonne D:

=QUERY(Sheet2!A1:C3, "Select B,C WHERE A='" & A1 & "'", 0)
15
White_King

Si vous pouvez mapper chaque "index" (a, b, c) sur une ligne ou une colonne spécifique, vous pouvez utiliser la fonction INDEX .

Dans ce cas, vous pouvez probablement mapper "a" sur la colonne A (ou la ligne 1), "b" sur la colonne B (ou la ligne 2), etc.

En outre, Merge Tables semblent adresser ce cas d'utilisation exact.

1
Marco Roy

Avec la table 'other' dans A5: C7, essayez:

=query({A1:C3,query(sort(A5:C7,1,TRUE),"Select Col2,Col3")})
0
pnuts