1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Datensätze in 2 Tabellen vergleichen und Wert übertragen

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Gullien, 9 August 2014.

  1. Gullien

    Gullien Benutzer

    Hallo Zusammen,

    habe ein Problem mit einer Datenbank für ein Projekt und leider im Forum nichts dazu gefunden. Brauche dringend eure HILFE.

    Habe 2 Tabellen in einer Access Datenbank, die keine Beziehung zueinander haben, da dies 2 unterschiedliche Tabellen sind.

    Brauche eine SQL-Abfrage, die mir 3 Spalten der beiden Datenbanken miteinander vergleicht und bei Übereinstimmung ein Wert aus der 1. Tabelle in die 2. Tabelle durch Einfügen einer neuen Spalte einfügt.
    Wichtig ist bei der Abfrage, dass die 4. Spalte der 1. Tabelle einen Zeitraum an gibt und genau passend zu diesem Zeitraum z.B. 2002-2007 bei der 2. Tabelle Spalten eingefügt werden und in diese Spalte dann der Wert (Teilenummer) aus der 1. Tabelle eingefügt werden soll.
    Habe an eine JOIN Abfrage gedacht aber da ich keine Beziehung habe ist dies leider total komplex.

    Würde mich Über sehr über Beispiele und Tipps freuen, da ich absolut nicht mehr weiss wie ich die Abfrage aufbauen soll.

    Vielen Dank im Voraus an alle die mich hierbei Unterstützten wollen.

    Gruß
    Gullien
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich denke, das ist schon mal der richtige Weg.

    Ja. Zeig doch mal ein Beispiel. Was für Tabellen hast Du, was steht drin, was soll passieren.
     
  3. Gullien

    Gullien Benutzer

    Tabelle 2.PNG Tabelle 1.PNG So sorry erstmals dass ich so spät antworte.Ich stelle mal Beispiele aus den 2 Datenbanktabellen im Anhang bereit. Leider kann ich nur Bilder hinzufügen, da keine Datenbank zugelassen ist.
    Anhang Bild Tabelle 2 ist durch eine Abfrage entstanden, da ich nur bestimmte Länder benötige mit der Abfrage:
    SELECT [Tabelle 2].[Strategic Group], [Tabelle 2].[Design Parent], [Tabelle 2].[Sales Parent], [Tabelle 2].[Sales Group], [Tabelle 2].[Sales Brand], [Tabelle 2].[Sales Nameplate], [Tabelle 2].[Global Nameplate], [Tabelle 2].[GVW Rating], [Tabelle 2].Platform, [Tabelle 2].Program, SUM([Tabelle 2].[CY 2004]) AS [Summe 2004], SUM([Tabelle 2].[CY 2005]) AS [Summe 2005], SUM([Tabelle 2].[CY 2006]) AS [Summe 2006], SUM([Tabelle 2].[CY 2007]) AS [Summe 2007], SUM([Tabelle 2].[CY 2008]) AS [Summe 2008], SUM([Tabelle 2].[CY 2009]) AS [Summe 2009], SUM([Tabelle 2].[CY 2010]) AS [Summe 2010], SUM([Tabelle 2].[CY 2011]) AS [Summe 2011], SUM([Tabelle 2].[CY 2012]) AS [Summe 2012], SUM([Tabelle 2].[CY 2013]) AS [Summe 2013], SUM([Tabelle 2].[CY 2014]) AS [Summe 2014], SUM([Tabelle 2].[CY 2015]) AS [Summe 2015]
    FROM [Tabelle 2]
    WHERE [Tabelle 2].Country In ('Germany','Austria','Italy','Greece','Spain','Portugal','Belgium','Luxembourg','Netherlands','Ireland','Denmark','Finland','Sweden','Switzerland','Norway','France','United Kingdom')
    GROUP BY [Tabelle 2].[Strategic Group], [Tabelle 2].[Design Parent], [Tabelle 2].[Sales Parent], [Tabelle 2].[Sales Group], [Tabelle 2].[Sales Brand], [Tabelle 2].[Sales Nameplate], [Tabelle 2].[Global Nameplate], [Tabelle 2].Program, [Tabelle 2].Platform, [Tabelle 2].[GVW Rating]
    ORDER BY "Summe 2015" DESC;

    Im Orginal wird ein Land mehrfach aufgelistet ich habe ein Land bei selbem Fahrzeug zusammengefallst und die Summe auch summiert.

    Nun ist mir wichtig dass zu dieser Abfrage nach jedem Jahr eine 4 Spalten eingefügt wird und in diesen Spalten dann wenn das Fahrzeug von Tabelle 1 in Tabelle 2 gefunden wird die Nummer in der Spalte "OE part number, Intellisens C4, Intellisens S4 und RDE. Die Nummern sollen dann genau in dem angegebenem Zeitraum eingefügt werden. Wie zum Beispiel von 2007-2009 die Moate müssen nicht berücksichtigt werden.

    Hört sich alles total komplex an...:(
    Hoffe sowas ist mit SQL möglich
     
  4. Gullien

    Gullien Benutzer

    Tabelle 2.PNG Das Bild von Tabelle 2 war falsch. Hier nochmals Tabelle 2. Hier sollen die Spalten nach jedem Jahr hinzugefügt werden. Also nach Sales 2004 vier leere Spalten die von der Tabelle 2 befüllt werden.
     
  5. Gullien

    Gullien Benutzer

    Weiss denn niemand wie ich da machen kann. Gibt ja hier viele Spezialisten. Brauche dringend Hilfeeee
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ich versteh Dein Problem noch immer nicht. Möglicherweise machst Du aber einen ganz groben Fehler: Datenbanken sind keine Tabellenkalkulationen.

    Hier findest Du übrigens Hilfe, wie man die Formatierungsmöglichkeiten der Forumssoftware nutzen kann: http://datenbankforum.com/help/bb-codes
     
  7. Gullien

    Gullien Benutzer

    Was verstehst du denn genau nicht?
    Möchte gerne die Datenbank hochladen nur geht das hier nicht habe nur Bilder von beiden Tabellen einfügen können.
     
  8. Gullien

    Gullien Benutzer

  9. akretschmer

    akretschmer Datenbank-Guru

    Nein. Hab und nutze kein Access. Wenn Du das auf ein schnell nachvollziehbares Beispiel in reinen SQL darstellen kannst könnte ich es mir anschauen.
     
  10. ukulele

    ukulele Datenbank-Guru

    Du schreibst auch etwas verwirrend von Spalten die eingefügt werden sollen, Abfragen tun das nicht und in Access weiss ich gar nicht ob das mittels SQL geht. Ich weiss leider auch nicht ob MERGE oder EXCEPT in Access unterstüzt werden, daher würde ich erstmal mit einem Select anfangen der nur die Unterschiede ausgibt.
    Code:
    SELECT    t1.IdEU,
            t1.vergleichsspalte1,
            t2.vergleichsspalte1,
            t1.vergleichsspalte2,
            t2.vergleichsspalte2,
            t1.vergleichsspalte3,
            t2.vergleichsspalte3
    FROM    tabelle1 t1
    FULL JOIN tabelle2 t2
    ON        t1.IdEU = t2.IdEU
    WHERE    t1.vergleichsspalte1 != t2.vergleichsspalte1
    OR        t1.vergleichsspalte2 != t2.vergleichsspalte2
    OR        t1.vergleichsspalte3 != t2.vergleichsspalte3
     
  11. Gullien

    Gullien Benutzer

    SELECT [OE part number], [Most Recent Interchange Part], [Intellisens C4], [Intellisens S4], RDE, [From/Year], [To/Year]
    FROM [Tabelle 1] AS A INNER JOIN [EU27+CH+NO] AS [OE part number]
    WHERE [EU27+CH+NO].[Sales Brand]=[Tabelle 1].Make AND [EU27+CH+NO].[Global Nameplate]=[Tabelle 1].Model AND [EU27+CH+NO].[Program]=[Tabelle 1].Modelvariant;

    Das habe ich mal geschrieben, nur funktioniert das natürlich nicht. Ich weiss nicht wie ich neue spalten hinzufügen soll die von der Tabelle 1 befüllt werden und genau in dem Zeitraum.
     
  12. Gullien

    Gullien Benutzer

    Puuh nun bin ich total durcheinander kann das nicht so ganz verstehen was du hier geschrieben hast. Bin kein SQL Profi :(
     
  13. ukulele

    ukulele Datenbank-Guru

    Erstmal wird gar nichts an Spalten erstellt oder befüllt, erstmal wird mit einem Select (den ich dir beispielhaft aufgeschrieben habe) nur der Inhalt der beiden Tabellen verglichen und nur die Unterschiede zurück gegeben.

    Das mit dem Zeitraum verstehe ich noch nicht ganz aber dein SQL Code ist voll mit Fehlern. Du musst schon irgendwelche Atribute haben anhand derer du die Daten mit JOIN zusammen führst. Deine Access kann ich nicht öffnen (habe nur Access 2003) und auf deinen Bildern finde ich z.B. keine sinnvollen Zusammenhänge und ich kenne mich auch nicht mit der Materie aus.
     
  14. Gullien

    Gullien Benutzer

    Ich brauch ja nicht die Unterschiede. Eigentl soll im ersten Schritt die Abfrage nur die Fahrzeuge von TAbelle 1 in Tabelle 2 suchen und wenn er diese findet dann die Teilenummer hinter der Spalte von Tablle 2 wo Sales 2004, Sales 2005 steht einfügen.

    DAs mit dem Zeitraum ist so:

    Habe 2 Tabellen in Access. Tabelle 1 hat Fahrzeuge mit Teilenummern die in einem bestimmten Zeitraum in einem Fahrzeug eingebaut sind.
    Tabelle 2 hat ebenso Fahrzeuge nur mit Verkaufszahlen und Länderzuordnung in Europa. Nun habe ich für Tabelle 2 eine Abfrage erstellt der mir für die gewünschten Länder die Fahrzeuge zusammenfährt und die Verkaufszahlen je Jahr in einer Spalte listet.
    Zu dieser Abfrage möchte ich, dass bei einem Fahrzeug z.B. BMW 3-Serie, F30 von 2006-2010 mit Teilenummer 222456 die Teilenummer bei den Spalten 2006-2010 je eine Spalte nach dem angegebenen Zeitraum in Tabelle 2 mit der Teilenummer eingefügt wird.

    Beispiel:

    Sales Brand Global Nameplate Prgram Sales 2004 OE number Sales 2005 OE number
    BMW 3-Series F30 10450 224560 10550 224560
     
  15. ukulele

    ukulele Datenbank-Guru

    Also ich könnte jetzt was zusammen frikeln aber das würde dein (wirklich sehr) verkorkstes DB Design weiter verschlechtern und vor allem nicht richtig Funktionieren. Du hast ja nur Marke und Modell als Zusammenhang, anhand dessen du diese Summe aus Tabelle 1 in Tabelle 2 schreiben willst. Jetzt sehe ich hier schon verschiedene Schreibweisen, "M7 Series" ohne Bindestrich und "3-Series" mit Strich. Ich gehe mal davon aus das die Schreibweisen der Marken in den beiden Tabellen von einander abweichen, das fängt schon damit an das die Spalte in Tabelle 1 Make und nicht Marke heißt.

    Ich brauche also gar nicht erst den einen Text im anderen zu suchen, da ich mich auf das Ergebnis überhaupt nicht verlassen kann und alles von Hand nachgucken muss. Was dir fehlt ist eine Tabelle mit allen Marken und Modellen, auf die aus den anderen Tabellen per Fremdschlüssel referenziert wird, alles Andere ist geraten.

    Des Weiteren betreibst du hier mit deinen Summen und Berechnungen massiv Tabellenkalkulation die eigentlich so gar nichts in Tabellen zu suchen hat. Hier würde sich eine Sicht mit GROUP BY und Summen Funktion anbieten.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden