it-swarm.com.de

Google spreadsheet "= QUERY" join () äquivalente Funktion?

Diese Frage betrifft das Verknüpfen zweier Datenbanken in der Google-Tabelle mit der Funktion = QUERY

Ich habe einen Tisch so im Bereich A1: C3

a d g
b e h
c f i

Ich habe noch einen Tisch

c j m
a k n
b l o

Ich möchte, dass der Finaltisch so aussieht

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

Ich kann dies tun, indem ich in Zelle D1 ziemlich einfach eine vlookup-Funktion verwende und sie nach unten und nach unten einfügte, aber mein Datensatz ist riesig. Ich brauche eine ganze Seite mit vlookups und Google Spreadsheet zeigt an, dass ich in Sachen Komplexität an meiner Grenze bin.

Ich schaue mir die Query Language-Referenz von Google an. Es scheint keine Art von "Join" -Funktionen zu sein. Man könnte meinen, es wäre eine einfache Operation des Typs "Join auf A".

Kann jemand dies ohne einen Lookup lösen?

45
jason

Kurze Antwort

Google QUERY Language Version 0.7 (2016) enthält keinen JOIN (LEFT JOIN) -Operator. Dies kann jedoch erreicht werden, indem eine Array-Formel verwendet wird, deren Ergebnis als Eingabe für die QUERY-Funktion oder für andere Zwecke verwendet werden kann.

Erläuterung

Array-Formeln und die Array-Handhabungsfunktionen von Google Sheets ermöglichen die Verknüpfung zwischen zwei einfachen Tabellen. Um die Lesbarkeit zu verbessern, verwendet die vorgeschlagene Formel benannte Bereiche anstelle von Bereichsverweisen.

Benannte Bereiche

  • table1: Sheet1! A1: C3
  • table2: Blatt2! A1: C3
  • ID: Blatt1! A1: A3

Formel

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

Bemerkungen: 

  • Die Verwendung von Endbereichen mit offenem Ende ist möglich, kann jedoch dazu führen, dass die Tabelle langsamer wird.
  • Um die Neuberechnungszeit zu verkürzen:
    1. Ersetzen Sie Indirect("R1C2:R1C"&COLUMNS(table2),0) durch ein Array von Konstanten von 2 bis zur Anzahl der Spalten von table2. 
    2. Entfernen Sie die leeren Zeilen aus dem Arbeitsblatt

Beispiel

Siehe dieses Blatt für ein Beispiel 

Hinweis

Google hat 2017 den offiziellen Hilfeartikel über QUERY, QUERY-Funktion verbessert. Es enthält noch keine Themen dieser Art, aber es könnte hilfreich sein, um zu verstehen, wie es funktioniert.

26
Rubén

Sie können ARRAYFORMULA oder YOU können diese Formel einfach ziehen: Nach einem Import oder QUERY- der ersten Tabelle; in der D-Spalte:

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

Dies beantwortet also, wie Sie es mit einer Vlookup-Funktion tun, aber in nur einer Zelle.
In Ihrem Beispiel hat jede Datentabelle die folgenden Zellreferenzen:

Tabelle 1: Tabelle 1! A1: C3

a d g
b e h
c f i

Tabelle2: Tabelle2! A1: C3

c j m
a k n
b l o

So sollte die Formel aufgebaut sein.

Join-Formel

=ArrayFormula(
   {
     Sheet1!A1:C,
     vlookup(Sheet1!A1:A, {Sheet2!A1:A, Sheet2!B1:C}, {2,3}, false)
   }
)

Der Schlüssel, um diese Formel zum Laufen zu bringen, ist zu verstehen, wie geschweifte Klammern im Vlookup-Bereich verwendet werden. Grundsätzlich definieren Sie den ersten Zellbezug des Bereichs als die Spalte, die mit dem Vlookup Search_Key übereinstimmen soll. Die restlichen Zellreferenzen im Bereich beziehen sich auf die Spalten, die Sie verbinden möchten.

Der Index wird als {2,3} geschrieben, um die zweite und dritte Spalte des Bereichs zurückzugeben (der Bereich besteht aus insgesamt 3 Spalten). geschweifte Klammern haben nichts mit Arrayformula im Vlookup-Index zu tun, sind jedoch erforderlich, um mehrere Spalten aus der Vlookup-Funktion zurückzugeben. Der Grund, {1,2,3} nicht zu schreiben, ist, dass Sie die Spalte, die zum Verbinden verwendet wird, nicht einschließen möchten.

Beispiel, in dem sich die Spalte in Tabelle2, die zum Verbinden verwendet wird, in einer anderen Spalte befindet (rechts von den Daten, die verbunden werden sollen)

Diese Art von Join-Formel kann auch dann verwendet werden, wenn sich die Join-Spalte in der zweiten Tabelle als dritte Spalte dieser Tabelle befindet. Angenommen, die Rohdaten in diesem Beispiel sehen folgendermaßen aus:

Tabelle 1 (Blatt 1):

a d g
b e h
c f i

Tabelle 2 (Blatt 2):

j m c
k n a
l o b

Wenn Sie die Formel so schreiben, erhalten Sie trotzdem das gewünschte Ergebnis (wie in der Tabelle der verbundenen Daten angezeigt):

=ArrayFormula(
   {
     Sheet1!A1:C,
     vlookup(Sheet1!A1:A, {Sheet2!C1:C, Sheet2!A1:B}, {2,3}, false)
   }
)

Die Tabelle der verbundenen Daten:

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

Beachten Sie in der Join-Formel, dass sich die dritte Spalte von Tabelle2 als erste Zellreferenz im Vlookup-Bereich befindet!
Der Grund, warum dies funktioniert, ist, dass der Vlookup Search_Key bei Verwendung von geschweiften Klammern im Bereich (in Verbindung mit Arrayformula) NICHT nach einer Spalte als gemeinsamen Nenner in den Rohdaten sucht, sondern nach dieser wird das Array in geschweiften Klammern als Referenz verwenden, um eine Spalte als gemeinsamen Nenner zu finden (standardmäßig ist dies die erste Spalte des Bereichs).

Ich habe einen umfassenden Leitfaden zu diesem Thema geschrieben:

'Join-Formeln in Google Sheets beherrschen'

4
Viktor

Wenn Sie jeden "Index" (a, b, c) einer bestimmten Zeile oder Spalte zuordnen können, können Sie die Funktion INDEX verwenden.

In diesem Fall können Sie 'a' wahrscheinlich der Spalte A (oder Zeile 1), 'b' der Spalte B (oder Zeile 2) usw. zuordnen.

Merge Tables scheint genau diesen Anwendungsfall zu behandeln.

1
Marco Roy

Versuchen Sie es mit der "anderen" Tabelle in A5: C7:

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