Announcement

Collapse
No announcement yet.

Summation im Update

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Summation im Update

    Ähnliche Probleme habe ich im Forum gefunden, nur leider konnte ich die Lösungen nicht zu einer mir passenden zusammenfassen.

    Ich habe zwei Tabellen A_1 und A_2, die jeweils einen Schluessel und eine Anzahl haben. Beide Tabellen sind nicht über einen Constraint verbunden. Die Schluesselspalten kann man als 'Businnes-Key' bezeichnen, der in beiden Tabellen identisch ist. (Im Beispiel wurde der Schlüssel mit einer Spalte abgebildet, in der Praxis stehen hier 4 bis 7 Spalten).
    Beide Tabellen stehen in verschiedenen Schemata. Die eine ist ein "Bestand" in einem DWH und die andere Tabelle ein entsprechendes Delta-Load dazu.

    Jetzt müssen die Werte aus A_2 nach A_1.
    Die Sätze mit einem Schlüssel, die nicht in A_1 sind kommen als neue Sätze mit einem Insert rein, was ja nicht so schwer ist.
    Von den Sätzen aus A_2, deren Schlüssel bereits in A_1 vorhanden ist, muß die Anzahl zum entsprechenden Wert in A_1 addiert werden.

    Also mit den Werten die unten stehen muß in A_1 im Ergebnis folgendes stehen
    für den Schlüssel EINS die Anzahl 12
    für den Schlüssel ZWEI die Anzahl 24
    (Die anderen 4 Zeilen vernachlässige ich jetzt mal, da das Instert nicht das Problem ist)

    Für Hinweise, die mich einer Lösung näher bringen, bedanke ich mich schon mal.

    Hier zum nachvollziehen kurz ein create script für die Tabellen und entsprechende Zeilen drin.
    CREATE TABLE A_1
    ( Schluessel VARCHAR2(6),
    Anzahl NUMBER );

    INSERT INTO A_1 VALUES('EINS',1);
    INSERT INTO A_1 VALUES('ZWEI',2);
    INSERT INTO A_1 VALUES('DREI',3);
    INSERT INTO A_1 VALUES('VIER',4);

    CREATE TABLE A_2
    ( Schluessel VARCHAR2(6),
    Anzahl NUMBER);

    INSERT INTO A_2 VALUES('EINS',11);
    INSERT INTO A_2 VALUES('ZWEI',22);
    INSERT INTO A_2 VALUES('FUENF',5);
    INSERT INTO A_2 VALUES('SECHS',6);

  • #2
    da würde MERGE helfen:
    http://www.oracle.com/pls/db102/sear...&format=ranked
    Code:
    MERGE INTO a_1 USING a_2  ON (A_1.schluessel = A_2.schluessel)
    WHEN     MATCHED THEN UPDATE SET A_1.anzahl=A_1.anzahl+A_2.anzahl
    WHEN NOT MATCHED THEN INSERT (A_1.schluessel, A_1.ANZAHL) VALUES (A_2.schluessel, A_2.anzahl)

    Comment


    • #3
      Ja, super.
      Das passt und funktioniert.
      Man lernt halt nie aus.
      Hab vielen Dank.

      Nur am Rand.
      Es scheint dabei nicht egal zu sein, in welcher Version ich den Befehl absetze.
      In einer 9.2.x kommt die hübsche Fehlermeldung: ORA-00905: missing keyword.
      Mache ich das ganze auf einer 10.1.x dann funktioniert es sofort.
      Da der produktive Teil eine 10ner Version ist, muß ich jetzt nur bei der Entwicklung tricksen.
      Also noch mal: Danke !

      Comment


      • #4
        Aha,
        Danke für die Ergänzung.
        Jetzt muß ich mal praktisch schauen, wie es im Script umgesetzt werden kann
        Noch vielen Dank

        Comment

        Working...
        X