Wie berechne ich pünktliche Lieferung, wenn SQL-Tabellen nicht eins zu eins sind

9

Ich habe die folgenden zwei Tabellen:

Fälligkeitsdaten:

%Vor%

PlDetail

%Vor%

Die Sendungen in PlDetail können eins zu eins mit den Bestellungen in der Tabelle DueDates sein, aber oft nicht.

Ich versuche, eine pünktliche Lieferung für jeden uniqueln -Plan mit einer FIFO -Methode zu berechnen (ich kann nicht ändern, wie die Daten in den Tabellen gespeichert werden). Grundsätzlich möchte ich die frühesten Sendungen auf die frühesten Lieferungen anwenden.

Wenn eine Sendungsmenge das Guthaben in einem DueDates -Datensatz überschreitet, sollte der Saldo für die nächste geplante Lieferung gelten.

Das Endergebnis sollte etwa so aussehen:

%Vor%

Ich kann die PlDetail -Sendungen strikt nach Datum gruppieren, so dass jede Sendung, die am oder vor dem nächsten Fälligkeitsdatum liegt, zusammen gruppiert wird, aber sie muss die geplante Menge gegen die gelieferte Menge einrechnen.

Ich möchte keinen Cursor erstellen und durch die Versanddatensätze navigieren, aber ich kann, wenn diese Art der Verknüpfung nicht funktioniert. Ich glaube jedoch, dass es möglich ist, aber ich bin nicht sicher, wie man die Tische gruppiert oder beitritt.

Es klingt wie SQL Server 2012 hat einige neue Methoden, die dies einfacher machen, aber im Moment benutze ich SQL SERVER 2008 R2 und muss es so für die nahe Zukunft halten.

Wie kann ich das am besten angehen? Ist ein Cursor wirklich der einzige Weg?

UPDATE: Das habe ich bisher hinzugefügt. Das Endergebnis ist eine Tabelle, die die Werte von und nach Menge und ship_dts für jedes uniqueln

zeigt %Vor%

CURSOR-ANSATZ:

Wie bereits erwähnt, könnte der beste Ansatz ein Cursor sein. Hoffentlich hat jemand eine Join-Methode, die alle Bedürfnisse erfüllt, aber bis dahin verwenden wir einen Cursor.

Falls jemand nach einer Lösung mit einem Cursor-Ansatz sucht, ist der Code unten, wie wir es gemacht haben. Der Benutzer wählt einen Datumsbereich aus, und die Ergebnisse werden erstellt. Bitte beachten Sie, dass Sie den Cursor für ALLE Datensätze der uniqueln ausführen müssen, auch wenn sie vor dem ausgewählten Datumsbereich versandt wurden, sonst ist die FIFO -Anwendung der Sendungen falsch.

%Vor%     
davids 19.12.2012, 21:03
quelle

1 Antwort

3

Ich habe versucht, etwas zusammenzusetzen, indem ich CTEs und ein Pidgin-Kreuz verwende, um zwischen den Tabellen zu arbeiten. (frag nicht, es war hässlich)

Anywho, nach ein bisschen lesen und wissen, wie groß sind die Tabellen, ich fühle mich ziemlich sicher, dies mit ... Trommelwirbel zu beantworten ... benutze einen Cursor. Es wird hässlich und langsam, aber die Logik wird auf dem Papier viel mehr Sinn machen. Es gibt eine Menge über wartbaren Code zu sagen ...

Update: Urlaub machen. Hier ist, womit ich gespielt habe.

%Vor%     
Nick Vaccaro 19.12.2012, 21:40
quelle

Tags und Links