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ź
Parowanie danych z dwóch tabel
Parowanie danych z dwóch tabel
OpenOffice 4.1 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro
Re: Parowanie danych z dwóch tabel
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ć
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".
Jak właściwie rozumieć
Jeżeli w polskiej wersji będą np. dwie siódemki a w słowackiej trzy, to powinno powstać 6 różnych par?Samson pisze:... w przypadku istnienia 2-3 wystąpień tego samego ID Calc stworzy kilka możliwych kombinacji połączeń
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.
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.
Re: Parowanie danych z dwóch tabel
Podam rozwiązane ale tylko jako ciekawostkę: To jest łatwe do osiągnięcia w Base.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?
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.
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
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Re: Parowanie danych z dwóch tabel
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);
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)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Parowanie danych z dwóch tabel
dziękuję za odpowiedzi
OpenOffice 4.1 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro
Libre Office 4.2 na Windows 7 Pro