ich die folgenden Tabellen:MERGE -Tabelle Altwert + neuer Wert mit
Tabelle 1:
Id | ClientId | Amount
------------------------------
1 | 100 |
2 | 130 |
..
9 | 280 |
Table2: Quelltabelle
Id | CashId | Price | Tax
-----------------------------
1 | 1 | 550 | 120
2 | 1 | 100 | 30
3 | 2 | 320 | 50
4 | 3 | 360 | 100
next data loads
5 | 1 | 80 | 20
6 | 2 | 20 | 9
7 | 4 | 190 | 80
usw. die Tabelle tmp aggregiert :
Tabelle3 (tmp):
Tabelle2 ist inkrementelles Laden, für jede CashId in der Tabelle kann Bargeldeinzahlung ein paar Mal auftreten. Für das erste Laden sind 2 Bareinzahlungen für CashId = 1. Für das zweite Laden ist 1 Bareinzahlung für CashId = 1, aber dieses Laden kam am nächsten Tag heraus.
Ich möchte prüfen, ob beim nächsten Laden neue Bareinzahlung kommt. Die Betragsspalte aus Tabelle1 besteht aus Summenangaben aus Preis und Steuern aus Tabelle2 für jede CashId.
Table1.Id = Table2.CashId
Wie nach dem 1. Laden aussehen Table1 sollte:
Id | ClientId | Amount
------------------------------
1 | 100 | 800
2 | 130 | 370
...
nach 2. Laden von Daten:
Id | ClientId | Amount
------------------------------
1 | 100 | 800 + 100 = 900
2 | 130 | 370 + 29 = 399
...
Ich dachte Anweisung wie folgt zu verwenden:
MERGE INTO Table1 trg
USING (SELECT * FROM Table3) cash
ON trg.Id = cash.CashId
WHEN MATCHED THEN
UPDATE SET trg.Amount = 'trg.Amount + new Total_Sum'
Ich muss ein neues Total_Sum aus dem neuen Laden zu den vorhandenen Daten in der Amount-Spalte in Table1 hinzufügen. Wenn neue Daten kommen und ich MERGE-Anweisung ausführen, sollte Total_Sum zu vorhandenem Wert in der Amount-Spalte hinzugefügt werden, aber wenn Daten zum ersten Mal kommen, sollte der Null-Wert in der Amount-Spalte ersetzt werden.
Ich habe versucht diesen Weg und ich bekomme Fehler: nicht in der Lage, eine stabile Reihe von Zeilen in den Quellentabellen zu erhalten "Eine stabile Reihe von Zeilen konnte nicht wegen großer dml-Aktivität oder einer nicht-deterministischen where-Klausel erhalten werden. – Merix
@Merix - Sie haben gesagt, dass es aggregiert ist, aber sind Sie sicher, dass Sie in Tabelle 3 keine doppelten CashId-Werte haben? –