2016-03-30 12 views
0

Angesichts einer Datenbank von Rechnungen, die auch Stornierungsrechnungen (= Gutschriften oder CNs) enthält. Ich möchte die stornierten Rechnungen für die Kennzeichnung sie auswählen. Um von Gutschrift zu Originalrechnung zu verknüpfen, gehen wir davon aus, dass der Kunde & entspricht. Problem: Es gibt mehrere CNs, die in oben criteria fallen, so muss ich jedes stornierte Originale finden. Zum Beispiel Wenn es 5 CNs gibt, dann können wir 6 Originalrechnungen finden, und 5 von ihnen sollten markiert werden, unter der Annahme, dass die neueste gültig ist (keine Flagge für diese letzte).Kontrollierte mehrere Ergebnisse in Access SQL. Finden Sie alle n Übereinstimmungen

Meine Aussage Gutschriften zu identifizieren, genannt später als "CancelInvs" zu (CN ist eine Ja/Nein-Flag)

SELECT * FROM Rechnungen WHERE CN

Folgenden einfach storniert Rechnungen findet aber im Fall Mehrfache Stornierungen existieren, es findet nur ein Original, wiederholt es mehrmals mit jedem zusätzlichen CN.

SELECT Min(InvNum) FROM Invoices 
INNER JOIN CancelInvs ON Invoices.Customer = CancelInvs.Customer AND Invoices.Amount = CancelInvs.Amount 
GROUP BY CancelInvs.InvNum 

Ich muss auch finden, dass die anderen als abgebrochen markiert werden. Kein Problem, VBA bei Bedarf hinzuzufügen. Danke für Ihre Aufmerksamkeit.

Beispieldaten: sample data img

Rechnungen und CreditNotes in der gleichen Tabelle sind. Der Einfachheit halber habe ich beide Mengen als positiv bewertet. Diejenigen, die mit einem passenden CN storniert wurden, müssen markiert sein. Gültige müssen nicht markiert werden. Einem CN können mehrere übereinstimmende Rechnungen vorangestellt werden. In diesem Fall muss nur der erste markiert werden.

Im Beispiel ist der Datensatz 1400 ein CreditNote. Die einzige Rechnung davor mit übereinstimmenden Parametern ist der Datensatz 1003. So wird 1003 als 'Storniert' gekennzeichnet. Die nächste CN ist 1580. Eine Rechnung davor mit übereinstimmenden Feldern ist 1412, also wird 1412 als 'Storniert' gekennzeichnet. 1003 ist bereits aus dem Spiel. Nicht mehr ungenutzte CreditNotes, also nichts mehr zu markierende Rechnung.

+0

Einige Beispieldaten und erwartetes Ergebnis würde helfen. Verwenden Sie http://www.sensefulsolutions.com/2010/10/format-text-as-table.html – Andre

+0

im Fragebereich zur Verfügung gestellt, indem Sie es bearbeiten.Ist im html- oder txt-Format nicht gelungen, also png hinzugefügt. – Tony68

+0

Für zukünftige Referenz meinte ich: Verwenden Sie den "MySQL" -Stil, fügen Sie den Text ein und formatieren Sie als Code. – Andre

Antwort

0

Ist ein Primärschlüssel, eine eindeutige Kennung für eine Rechnung? Dann sollte die CN-Tabelle ein Feld haben, um diesen Wert zu halten. Dies wird Ihnen JOIN in einer anständigen Art und Weise.

Sie müssen eine Möglichkeit haben, das Original aus dem CN eindeutig zu identifizieren. In der Regel wäre das InvNum, in der CN als Fremdschlüssel gespeichert. Ohne das haben Sie Kunde und Betrag verwendet. Aber diese Kombination lässt dich das Original nicht eindeutig identifizieren. Deshalb kannst du nicht tun, was du willst.

+0

Anerkannt ist die schnelle Antwort sowieso. Danke – Tony68

+0

Schlägt die zweite SQL für Sie vor? ('DISTINCT' kann entfernt werden, aber es tut nichts weh.) – Smandoli

+0

Diese sql findet alle Übereinstimmungen, unabhängig davon, ob sie ein relevantes Paar haben oder nicht. Eine Stornierungsnummer kann nur ein Original stornieren. Paare. – Tony68

0

Lassen Sie uns es verlassen. Hat sich als zu komplex erwiesen, so einfach. Select-Abfragen können nicht behandelt werden. Beschlossen, VBA-Zyklus zu tun und Flagging mit tmp Tabellen zu verwalten. Danke euch allen.

Eine dummerweise komplexe Prozedur wurde schließlich aufgrund der Natur dieser realen Aufgabe verwendet. Mein SQL enthält VBA-gesteuerte adaptive Parameter. Um nur einen Einblick zu geben, hier ist der Prozess (in Form von menschenfreundlichen Skript).

Begin cycle 
Count and collect matching Invoices per CreditNote (criteria: same repairer & customer & amount, not cancelled) 
Flag lines in collection table as 'Duplicate' where same Invoice appears for several CNs 
Process the 1-1 matches by flagging Invoices as 'Cancelled' 
Flag the processed CNs as 'Done', in CN matches collection table 
If there are no 1-1 matches, allow multiple matches for CNs for one cycle - find earliest occurence of Invoice matches 
Loop cycle while any matches remain 
Drop any unpaired CN 
Verwandte Themen