Parowanie danych z dwóch tabel

Użytkowanie arkusza kalkulacyjnego
Awatar użytkownika
Samson
Posty: 38
Rejestracja: wt cze 14, 2011 5:31 pm
Lokalizacja: Poprad

Parowanie danych z dwóch tabel

Post autor: Samson »

Cześć,
mam taki problem
mam dwie dwukolumnowe tabele

Tabela 1

ID Tekst A
1
2
...
165

Tabela 2

ID Tekst B
1
2
...
256

ID w ramach jednej tabeli może się powtarzać (i jest to nie liczba ale kod liczbowo-literowy)


Chodzi mi o to, że chcę połączyć dane z tych tabel w taki sposób, żeby stworzyć trójkolumnową tabelę
w której będzie

ID Tekst A Tekst B

z tym, że w przypadku istnienia 2-3 wystąpień tego samego ID Calc stworzy kilka możliwych kombinacji połączeń
czy jest to możliwe?
przykładowy plik
https://files.mycloud.com/home.php?bran ... e=przyklad


Z góry dzięki za odpowiedź
OpenOffice 4.1 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro
Awatar użytkownika
Jermor
Posty: 2255
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Parowanie danych z dwóch tabel

Post autor: Jermor »

W załączonym przez ciebie przykładzie nigdzie nie występują zwielokrotnione ID. I dobrze, bo ID powinno dotyczyć jednego terminu.
Jak właściwie rozumieć
Samson pisze:... w przypadku istnienia 2-3 wystąpień tego samego ID Calc stworzy kilka możliwych kombinacji połączeń
Jeżeli w polskiej wersji będą np. dwie siódemki a w słowackiej trzy, to powinno powstać 6 różnych par?
Takiego rozwiązania bez wykorzystania makr nie widzę.
Na teraz odsyłam ci propozycję utworzenia tabeli połączonej, zakładającą wystąpienie jednego wspólnego ID. Przyjąłem, że podane są wszystkie terminy polskie, natomiast terminy słowackie mogą nie wystąpić. Ponadto nie ma żadnego terminu słowackiego, który nie miałby podanego polskiego odpowiednika.
W tabeli wynikowej użyłem funkcji WYSZUKAJ.PIONOWO(). Dla terminu polskiego, który nie ma odpowiednika słowackiego, generuje ona wynik #N/D. Dla łatwiejszego znalezienia takiego miejsca kolumna słowacka ma przypisane formatowanie warunkowe, wyświetlające taki wynik w kolorze różowym. Po posortowaniu tej wynikowej tablicy malejąco wg kolumny SK wszystkie wiersze bez słowackiego tłumaczenia pojawią się na początku zestawienia.
W tym odesłanym pliku, tabeli z polskimi terminami nadałem nazwę "tab1" a tabeli z terminami słowackimi "tab2". W pierwszym arkuszu wstawiłem formuły, które wyznaczają najdłuższy tekst zamieszczony po polsku i jego położenie w tablicy "tab1".
Załączniki
samson przyklad.ods
(379.33 KiB) Pobrany 142 razy
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 516
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Parowanie danych z dwóch tabel

Post autor: Rafkus »

Samson pisze: z tym, że w przypadku istnienia 2-3 wystąpień tego samego ID Calc stworzy kilka możliwych kombinacji połączeń
czy jest to możliwe?
Podam rozwiązane ale tylko jako ciekawostkę: To jest łatwe do osiągnięcia w Base.
Utworzyłem nową bazę danych. W twoim pliku zaznaczyłem całą tabelę 1, skopiowałem i wkleiłem do Base jako Tabela1. Pominąłem celowo proces tworzenia klucza głównego. To samo zrobiłem z tabelą 2.
Następnie przeszedłem do utworzenia kwerendy: Tabela1 i Tabela2 zostały lewostronnie połączone polami ID. Dzięki temu uzyskałem:
  • Zostaną wyświetlone wszystkie wyniki z tabeli1 (polskie znaczenia);
  • jeżeli w słowackiej tabeli2 nie będzie odpowiednika polskiego tekstu pole SK będzie puste;
  • jeżeli w słowackiej tabeli2 będzie jakiś rekord nie występujący w tabeli1 - zostanie on pominięty;
  • jeżeli w słowackiej tabeli2 będzie kilka odpowiedników dla polskiego znaczenia - zostaną one wyświetlone wszystkie.
W załączniku podaję to rozwiązanie tylko jako ciekawostkę, bo ... to BASE - produkt nieco niedopracowany, często zawodny, w sam raz aby się nim bawić w domu. A do pracy, lepiej go nie używać (a zwłaszcza NIE bez kilku kopi).
Gdy miałem wklejone wszystkie dane z twojego pliku (obie tabele miały po ponad 5000 rekordów) na wyświetlenie wyniku kwerendy lub raportu musiałem nieco poczekać.
Tabelki PL i SK są tabelami testowymi, co by było jakby ID się powtarzały, ich wynik jest w kwerendzie test.

PS. Chciałem zrobić bazę, którego źródłem danych jest arkusz kalkulacyjny, ale niestety funkcjonalność kwerend jest wówczas mocno ograniczona (nie można utworzyć zapytania z więcej niż jednej tabeli).
Załączniki
slownik.odb
(22.8 KiB) Pobrany 120 razy
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Parowanie danych z dwóch tabel

Post autor: Jan_J »

Najefektywniej byłoby wlać dane do bazy relacyjnej. Niekoniecznie do Base (patrz co @Rafkus napisał wyżej), ale choćby do SQLite. Szybka baza, bez koniecznosci stawiania serwera, czyta/produkuje csv-y: patrz https://www.sqlitetutorial.net/sqlite-import-csv/
Zresztą sterownik jdbc łączący SQLite z Base istnieje.

Albo do dwóch tabel utworzonych następująco:
CREATE TABLE Tabela_PL (Id INTEGER, Term_PL TEXT, PRIMARY KEY(Id));
CREATE TABLE Tabela_SK (Id INTEGER , Term_SK TEXT, PRIMARY KEY(Id));
W bazie pytanie
SELECT * FROM Tabela_PL JOIN Tabela_SK USING(Id);
utworzy listę odpowiadających sobie par. Użycie FULL JOIN zamiast JOIN spowoduje dołączenie także wpisów niedopasowanych do par.

Albo do jednej tabeli zbudowanej wg schematu
CREATE TABLE Tabela(Id INTEGER, Lang TEXT, Term TEXT)
przy czym Id nie będzie kluczem tabeli przy tym podejściu (będzie nim para (Id, Lang)).
Wtedy odpowiednie będzie pytanie
SELECT Id, P.Term as Term_PL, S.Term as Term_SK FROM Tabela as P JOIN Tabela as S USING(Id);
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Samson
Posty: 38
Rejestracja: wt cze 14, 2011 5:31 pm
Lokalizacja: Poprad

Re: Parowanie danych z dwóch tabel

Post autor: Samson »

dziękuję za odpowiedzi
OpenOffice 4.1 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro
ODPOWIEDZ