Diese Frage betrifft das Zusammenführen von zwei Datenbanken in der Google-Tabelle mit der Funktion = QUERY
Ich habe eine solche Tabelle 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 Final Table so aussieht
a d g k n
b e h l o
c f i j m
Ich kann dies tun, indem ich eine Vlookup-Funktion ziemlich einfach in Zelle D1 verwende und sie nach unten und quer einfüge, aber mein Datensatz ist riesig. Ich würde eine ganze Seite mit Lookups benötigen und Google Spreadsheet sagt, dass ich in Bezug auf Komplexität an meiner Grenze bin.
Ich schaue auf die Google Query Language-Referenz ... es scheint keine Art von "Join" -Funktionen zu geben, die erwähnt werden. Sie würden denken, es wäre eine einfache Operation vom Typ "Join on A".
Kann jemand dies ohne einen Lookup lösen?
index
undmatch
hätte die gleiche Komplexität wie Lookups, aber Sie können diese Implementierung ausprobieren . Wenn dies nicht funktioniert, muss meiner Meinung nach eine benutzerdefinierte Funktion geschrieben werden.rand()
Funktion neuAntworten:
Kurze Antwort
Google QUERY Language Version 0.7 (2016) enthält keinen JOIN-Operator (LEFT JOIN). Dies kann jedoch mithilfe einer Array-Formel erreicht werden, deren Ergebnis als Eingabe für die QUERY-Funktion oder für andere Zwecke verwendet werden kann.
Erläuterung
Array-Formeln und die Array-Bearbeitungsfunktionen von Google Sheets ermöglichen es, eine Verbindung zwischen zwei einfachen Tabellen herzustellen. Um das Lesen zu vereinfachen, werden in der vorgeschlagenen Formel benannte Bereiche anstelle von Bereichsreferenzen verwendet.
Benannte Bereiche
Formel
Bemerkungen:
Indirect("R1C2:R1C"&COLUMNS(table2),0)
durch ein Array von Konstanten von 2 bis zur Anzahl der Spalten von Tabelle2.Beispiel
In diesem Blatt finden Sie ein Beispiel
Hinweis
2017 hat Google den offiziellen Hilfeartikel in englischer Sprache über die Funktion QUERY, QUERY verbessert . Es enthält noch keine Themen wie diese, könnte aber hilfreich sein, um zu verstehen, wie es funktioniert.
quelle
Sie können
ARRAYFORMULA
diese Formel verwenden oder Sie können sie einfach ziehen: nach einem Import oderQUERY
-ing der ersten Tabelle; in der Spalte D:=QUERY(Sheet2!A1:C3, "Select B,C WHERE A='" & A1 & "'", 0)
quelle
Dies beantwortet also, wie Sie es mit einer Vlookup-Funktion tun, aber nur in einer Zelle.
In Ihrem Beispiel hat jede Datentabelle die folgenden Zellreferenzen:
Tabelle 1: Blatt 1! A1: C3
Tabelle 2: Blatt 2! A1: C3
So sollte die Formel aufgebaut sein.
Join-Formel
Der Schlüssel, damit diese Formel funktioniert, besteht darin, zu verstehen, wie geschweifte Klammern im Vlookup-Bereich verwendet werden. Grundsätzlich definieren Sie die erste Zellreferenz des Bereichs als die Spalte, die mit dem Vlookup Search_Key übereinstimmen soll. Der Rest der Zellreferenzen im Bereich bezieht sich auf die Spalten, denen Sie beitreten 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 von der Vlookup-Funktion zurückzugeben. Der Grund, {1,2,3} nicht zu schreiben, besteht darin, dass Sie die Spalte, die zum Verknüpfen verwendet wird, nicht einschließen möchten.
Beispiel, in dem sich die zum Verknüpfen verwendete Spalte in Tabelle 2 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 würden folgendermaßen aussehen:
Tabelle 1 (Blatt 1):
Tabelle 2 (Blatt 2):
Wenn Sie die Formel so schreiben, erhalten Sie immer noch das gewünschte Ergebnis (wie in der Tabelle der verknüpften Daten angezeigt):
Die Tabelle der verknüpften Daten:
Beachten Sie in der Join-Formel, dass sich die dritte Spalte von Tabelle 2 als erste Zellreferenz im Vlookup-Bereich befindet!
Der Grund, warum dies funktioniert, liegt darin, 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 das darin enthaltene Array verwendet geschweifte Klammern als Referenz, 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:
"Beherrschen von Join-Formeln in Google Sheets"
quelle
Wenn Sie jeden "Index" (a, b, c) einer bestimmten Zeile oder Spalte zuordnen können, können Sie die
INDEX
Funktion verwenden.In diesem Fall könnten Sie wahrscheinlich 'a' Spalte A (oder Zeile 1), 'b' Spalte B (oder Zeile 2) usw. zuordnen.
Außerdem scheinen Zusammenführungstabellen genau diesen Anwendungsfall zu behandeln.
quelle
Versuchen Sie mit der 'anderen' Tabelle in A5: C7:
=query({A1:C3,query(sort(A5:C7,1,TRUE),"Select Col2,Col3")})
quelle
Ich habe dies mit Javascript LINQ (sprachintegrierte Abfrage) gelöst.
Hier können Sie Javascript mit komplexen Verknüpfungsbedingungen angeben. Sie können auch andere SQL-Abfragen ausführen, z. B. Gruppieren, Projizieren, Sortieren und Filtern Ihrer Blätter, als wären sie Datenbanktabellen. Schauen Sie sich die Links unten an.
Beachten Sie, dass ich in der LINQ-Abfragesprache alle Leerzeichen in Spaltennamen durch Unterstriche ersetzt habe, um sie zu gültigen JS-Bezeichnern zu machen.
https://docs.google.com/spreadsheets/d/1DHtQlQUlo-X_YVfo-Wo-b7315sSk2pxL5ci4Y9lxvZo/edit?usp=sharing
https://script.google.com/d/1R5L2ReHJrBRwyoSoVOFLzEQZiGtxidPfPkAeVownt7SWX6TpacY7gA7j/edit?usp=sharing
quelle