Google spreadsheet "= QUERY " join() równoważna funkcja?

To pytanie dotyczy połączenia dwóch baz danych w arkuszu kalkulacyjnym Google za pomocą funkcji = QUERY

Mam taką tabelę w zakresie A1: C3

a d g
b e h
c f i

I have another table

c j m
a k n
b l o

Chcę, aby końcowa tabela wyglądała tak

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

Mogę to zrobić, używając funkcji vlookup całkiem łatwo w komórce D1 i wklejając ją w dół i w poprzek, ale mój zbiór danych jest ogromny. Potrzebowałbym całej strony vlookupów i Google Spreadsheet mówi, że jestem na moim limicie w kompleksy.

Patrzę na odnośnik języka zapytań Google... nie wydaje się, aby były wymienione funkcje typu "join". Można by pomyśleć, że byłaby to łatwa operacja typu "join on a".

Czy ktoś może to rozwiązać bez vlookupu?
Author: Rubén, 2013-02-10

4 answers

Krótka odpowiedź

Google QUERY Language Wersja 0.7 (2016) nie zawiera operatora JOIN (LEFT JOIN), ale można to uzyskać za pomocą formuły tablicy, której wynik może być użyty jako Wejście dla funkcji zapytania lub do innych zastosowań.

Wyjaśnienie

Formuły tablicowe i funkcje obsługi tablic w Arkuszach Google umożliwiają łączenie dwóch prostych tabel. W celu ułatwienia odczytu proponowana formuła używa nazwanych zakresów zamiast odniesień do zakresu.

Zakresy Nazw

  • table1: Sheet1!A1: C3
  • table2 : Sheet2!A1: C3
  • ID: Sheet1A1: A3

Wzór

=ArrayFormula(
   {
     table1,
     vlookup(ID,table2,COLUMN(Indirect("R1C2:R1C"&COLUMNS(table2),0)),0)
   }
)

Uwagi:

  • używanie zakresów otwartych jest możliwe, ale może to spowolnić działanie arkusza kalkulacyjnego.
  • aby przyspieszyć czas przeliczania :
    1. Zastąp Indirect("R1C2:R1C"&COLUMNS(table2),0) tablicą stałych od 2 do liczby kolumn table2.
    2. Usuń puste wiersze z arkusza kalkulacyjnego

Przykład

Zobacz ten arkusz dla przykładu

Uwaga

W 2017 roku Google poprawiło oficjalny artykuł pomocy w języku angielskim o zapytaniu, funkcja zapytania . Nadal nie zawiera jeszcze takich tematów, ale może być pomocne, aby zrozumieć, jak to działa.

 21
Author: Rubén,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 15:43:19

Możesz użyć ARRAYFORMULA lub możesz po prostu przeciągnąć tę formułę: po imporcie lub QUERY - w pierwszej tabeli; w kolumnie D:

=QUERY(Sheet2!A1:C3, "Select B,C WHERE A='" & A1 & "'", 0)
 13
Author: White_King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-20 10:52:51

Jeśli możesz odwzorować każdy "indeks" (a, b, c) do określonego wiersza lub kolumny, możesz użyć INDEX funkcja.

W tym przypadku, prawdopodobnie można mapować " a "do kolumny A (lub wiersz 1)," b " do kolumny B (lub wiersz 2), i tak dalej.

Również Scalanie tabel wydaje się rozwiązywać dokładnie ten przypadek użycia.

 1
Author: Marco Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 19:08:15

Z tabelą "inne" w formacie A5: C7, spróbuj:

=query({A1:C3,query(sort(A5:C7,1,TRUE),"Select Col2,Col3")})
 0
Author: pnuts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-15 02:37:58