Ich habe Inventory DB Design mit Tabellen stock_transactions
und stock_transactions_serials
. Die Lagertransaktionstabelle enthält alle IN- und OUT-Transaktionen aus Warehouses. Jede Transaktion kann eine Liste mit zugehörigen Serien haben, die in stock_transactions_serials
mit dem Index stock_transaction_id + serial_id aufgezeichnet wird.mysql Inventar Transaktionen - Liste der Serien an Standorten
Ich muss eine Abfrage erstellen, die die Liste der Zeitschriften an allen Standorten auflistet, wo Menge> 0. Ich habe SQL-Geige hier erstellen, um einige Daten zu haben, um auf http://sqlfiddle.com/#!9/520bfa/5 zu arbeiten.
Derzeit meine SQL ist wie folgt:
SELECT
ST.id,
ST.warehouse_location_id,
ST.product_id,
SUM(ST.quantity) AS qty,
STS.serials AS serials
FROM stock_transactions ST
LEFT JOIN (
SELECT stock_transaction_id, GROUP_CONCAT(serial_id) AS serials
FROM stock_transactions_serials
GROUP by stock_transaction_id
) STS ON STS.stock_transaction_id = ST.id
WHERE
ST.document_id = 9
GROUP BY ST.warehouse_location_id
HAVING qty > 0
Das Ergebnis aus dieser SQL nicht ganz richtig ist. QTYs sind richtig, aber die Seriennummern sind falsch ... Es werden keine Serien berücksichtigt, die bei anderen Lagertransaktionen für dieses Dokument übriggeblieben sind oder an den Standort gekommen sind.
Ergebnis sollte sein:
Lage 51 Serien: 22229
Standort 52 Serien: 22221, 22222, 22223, 22224, 22225
UPDATE: nur meine Frage klarer zu machen. Sie bewegen 5 Computer mit den Seriennummern A, B, C, D, E von Standort X nach Y. Jetzt haben Sie 5 Laptops mit Seriennummern an Standort Y. Als nächstes bewegen Sie einen Laptop von Standort Y mit Seriennummer A zurück an Standort X. Und dann noch ein Laptop mit serieller F von Standort X zu Standort Z ... Ich möchte wissen, wie viele Laptops (und welche Serien) an jedem Standort nach all den Transaktionen ....
UPDATE2: möchte Lösung auch für Artikel, die keine Serien haben. Zum Beispiel verschiebe ich 5 USB-Sticks von Ort A nach Ort B. Dann 2 von B nach C. Und schließlich noch 2 von A nach C. Welche Mengen gibt es an jedem Ort?
Die allgemeine GROUP BY-Regel besagt: Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte angeben oder das Argument einer SET-Funktion sein! – jarlh
@jarlh Dein Kommentar hilft mir leider nicht viel –
Ich verstehe den Satz nicht, der mit 'Es ist nicht unberechenbar 'beginnt. Bitte klären Sie die Frage. – Shadow