Kysymys taulukoiden yhdistämisestä

Elikkä kysymys koskee kahden eri mittaisen taulukon liittämisestä. Toisessa talulukossa on kolme riviä ja 2 saraketta (;=solujen väli) esim:
1;2
2;34
3;44

Toisessa taas kaksi riviä ja saraketta esim:
1;33
3;23

Miten saan nuo liitettyä niin että lopputulos on "automaattisesti" seuraavanlainen:
1;2;1;33
2;34;;
3;44;3;23

Elikkä niin että jälkimmäisestä taulukosta rivit menevät oikeille paikoilleen ekaan taulukkoon. Elikkä taulukkojen 1. sarakkeiden numerot "löytävät toisensa".


Yllä hyvin yksinkertaistettu taulukko, mutta jos rivejä on tuhansia on manuaalinen liittäminen hankalaa.

Varmaan ihan simppeli homma mutta vasta-alkajana en keksi miten moinen toteutetaan.

Kiitos!
51422
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Jos tekstitiedostojen kanssa pelaat, Linuxissa/Unixissa tuo menisi seuraavalla komennolla:

$ join f1.txt f2.txt -t ';' -a 1
1;2;33
2;34
3;44;23

jos yhdistettävät tiedot ovat tiedostoissa f1.txt ja f2.txt. Erotinmerkki asetetaan -t:llä. Muuten tehdään tavallinen join, mutta -a-parametrilla vastaamattomat rivit otetaan ensimmäisestä tiedostosta.

Äänestä
  • Kiitos vastauksesta!

    Elikkä käyttis on XP ja tiedosto on excel/Open office taulukko. Siis Open Office taulukkolaskennassa näitä yritin yhdistellä. Tosin nuo tiedostot on kyllä myös tekstitiedostoina joten voi ne liittää ennen taulukkona avaamistakin. Ajattelin jos ne saisi avattua samaan Open office taulukkoon (siis ensin toinen auki ja lisätään tähän toinen copy pastella) ja taulukkolaskenta osaisi jollain komennolla järjestää rivit oikein.

    Kiitos!

    Äänestä

  • Mikes kirjoitti:

    Kiitos vastauksesta!

    Elikkä käyttis on XP ja tiedosto on excel/Open office taulukko. Siis Open Office taulukkolaskennassa näitä yritin yhdistellä. Tosin nuo tiedostot on kyllä myös tekstitiedostoina joten voi ne liittää ennen taulukkona avaamistakin. Ajattelin jos ne saisi avattua samaan Open office taulukkoon (siis ensin toinen auki ja lisätään tähän toinen copy pastella) ja taulukkolaskenta osaisi jollain komennolla järjestää rivit oikein.

    Kiitos!

    Ok, luulin että tiedot olivat tekstitiedostossa, kun esitit ne tuolla puolipistemerkinnällä.

    No se mitä ylläoleva teki oli kahden tietokantataulun join-operaation. En tiedä saako moista tehtyä Calcissa helposti, taitaa Basella olla helpointa.

    Koska haluat myös toisen taulun rivin vaikka vastinetta ei löytyisikään toisesta, olisi kyseessä "FULL OUTER JOIN"-kysely. OpenOffice ei käsittääkseni tue tätä kyselyä kevyessä XML-pohjaisessa tietokantamuodossa (joillain muilla muodoilla se toimii), mutta jos toispuoleinen ratkaisu riittää niin LEFT OUTER JOIN ja RIGHT OUTER JOIN toimivat.

    Eli tehdään kaksi taulua Taulu1 ja Taulu2, joissa on "id" pääavaimena. Tehdään seuraavanlainen SQL-kysely:

    SELECT * FROM { OJ "Taulu1" LEFT OUTER JOIN "Taulu2" ON "Taulu1"."id" = "Taulu2"."id" }

    tai hieman siistimmin:

    SELECT "Taulu1"."id", "Taulu1"."arvo", "Taulu2"."arvo" FROM { OJ "Taulu1" LEFT OUTER JOIN "Taulu2" ON "Taulu1"."id" = "Taulu2"."id" }

    Äänestä

  • Magi_Suuri kirjoitti:

    Ok, luulin että tiedot olivat tekstitiedostossa, kun esitit ne tuolla puolipistemerkinnällä.

    No se mitä ylläoleva teki oli kahden tietokantataulun join-operaation. En tiedä saako moista tehtyä Calcissa helposti, taitaa Basella olla helpointa.

    Koska haluat myös toisen taulun rivin vaikka vastinetta ei löytyisikään toisesta, olisi kyseessä "FULL OUTER JOIN"-kysely. OpenOffice ei käsittääkseni tue tätä kyselyä kevyessä XML-pohjaisessa tietokantamuodossa (joillain muilla muodoilla se toimii), mutta jos toispuoleinen ratkaisu riittää niin LEFT OUTER JOIN ja RIGHT OUTER JOIN toimivat.

    Eli tehdään kaksi taulua Taulu1 ja Taulu2, joissa on "id" pääavaimena. Tehdään seuraavanlainen SQL-kysely:

    SELECT * FROM { OJ "Taulu1" LEFT OUTER JOIN "Taulu2" ON "Taulu1"."id" = "Taulu2"."id" }

    tai hieman siistimmin:

    SELECT "Taulu1"."id", "Taulu1"."arvo", "Taulu2"."arvo" FROM { OJ "Taulu1" LEFT OUTER JOIN "Taulu2" ON "Taulu1"."id" = "Taulu2"."id" }

    Kiitos vastauksesta. En tosin tiedä edes mikä base on joten pitää keksiä toinen keino. Eiköhän se tuosta lutviinnu.

    Äänestä

  • Mikes kirjoitti:

    Kiitos vastauksesta. En tosin tiedä edes mikä base on joten pitää keksiä toinen keino. Eiköhän se tuosta lutviinnu.

    OpenOfficen tietokantaohjelma. Mutta jos et tiedä mikä se on, voi tuon tekeminen sillä olla turhan työlästä, vaikkakin ehkä opettavaista.

    Calcilla tuon saa tehtyä käyttämällä Calcin VLOOKUP-funktiota hakemaan tiedon kakkostaulukosta ykköstaulukon tunnistenumeron perusteella. Tällä saa haettua vastineet vain toisen taulukon perusteella, eli jos haluaa molempiin suuntiin, pitää tehdä sama juttu molemmille taulukoille. Sitten kopioidaan tulokset peräkkäin, järjestetään ja suodatetaan duplikaatit pois. Tässä on jonkin verran käsityötä, mutta onnistuu kyllä.

    Äänestä

Kommentoi aloitusta


Mikes kirjoitti:

Elikkä kysymys koskee kahden eri mittaisen taulukon liittämisestä. Toisessa talulukossa on kolme riviä ja 2 saraketta (;=solujen väli) esim:
1;2
2;34
3;44

Toisessa taas kaksi riviä ja saraketta esim:
1;33
3;23

Miten saan nuo liitettyä niin että lopputulos on "automaattisesti" seuraavanlainen:
1;2;1;33
2;34;;
3;44;3;23

Elikkä niin että jälkimmäisestä taulukosta rivit menevät oikeille paikoilleen ekaan taulukkoon. Elikkä taulukkojen 1. sarakkeiden numerot "löytävät toisensa".


Yllä hyvin yksinkertaistettu taulukko, mutta jos rivejä on tuhansia on manuaalinen liittäminen hankalaa.

Varmaan ihan simppeli homma mutta vasta-alkajana en keksi miten moinen toteutetaan.

Kiitos!

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu